能否在ASP.NET项目的web.config中定义Filteredtextboxextender的FilterType?
优化ASP.NET中FilteredTextBoxExtender全局配置的方案
针对你需要在80个页面同步配置FilteredTextBoxExtender的问题,以下是几种可落地的优化方案,彻底解决重复代码和维护繁琐的问题:
方案1:封装全局工具类统一处理配置解析
把配置判断逻辑集中到一个工具类里,所有页面直接调用工具类获取配置,避免每个页面写重复的If-Else。
步骤1:配置web.config
保留原有的SomeVariable配置,或者扩展自定义字符的配置项:
<appSettings> <add key="SomeVariable" value="A" /> <!-- 自定义字符场景的配置 --> <add key="CustomValidChars" value="!QW" /> </appSettings>
步骤2:创建全局工具类
Imports System.Configuration Imports AjaxControlToolkit Public Class FilterConfigHelper ''' <summary> ''' 根据配置返回对应的FilterType ''' </summary> Public Shared Function GetTargetFilterType() As FilterTypes Dim configValue = ConfigurationManager.AppSettings("SomeVariable") Return configValue.ToUpper() Switch { "A" => FilterTypes.LowercaseLetters Or FilterTypes.UppercaseLetters Or FilterTypes.Numbers, "B" => FilterTypes.Numbers, "C" => FilterTypes.Custom, Else => FilterTypes.None ' 默认过滤规则 } End Function ''' <summary> ''' 获取自定义过滤字符 ''' </summary> Public Shared Function GetCustomValidChars() As String Return ConfigurationManager.AppSettings("CustomValidChars") OrElse String.Empty End Function End Class
步骤3:页面后台简化调用
每个页面只需要几行代码,无需重复判断:
Dim filterType = FilterConfigHelper.GetTargetFilterType() txtLTWo_Filteredtextboxextender.FilterType = filterType If filterType = FilterTypes.Custom Then txtLTWo_Filteredtextboxextender.ValidChars = FilterConfigHelper.GetCustomValidChars() End If
后续要修改过滤规则,只需要更新工具类的逻辑或web.config配置,不用逐个修改80个页面。
方案2:自定义FilteredTextBoxExtender控件(彻底解放页面代码)
如果想完全消除页面后台的配置代码,可以自定义一个继承自FilteredTextBoxExtender的控件,在控件内部自动读取配置并设置属性。
步骤1:编写自定义控件
Imports System.Web.UI Imports AjaxControlToolkit <DefaultProperty("TargetControlID"), ToolboxData("<{0}:ConfigurableFilteredTextBoxExtender runat=server></{0}:ConfigurableFilteredTextBoxExtender>")> Public Class ConfigurableFilteredTextBoxExtender Inherits FilteredTextBoxExtender Protected Overrides Sub OnInit(e As EventArgs) MyBase.OnInit(e) ' 自动读取配置并设置属性 Dim filterType = FilterConfigHelper.GetTargetFilterType() Me.FilterType = filterType If filterType = FilterTypes.Custom Then Me.ValidChars = FilterConfigHelper.GetCustomValidChars() End If End Sub End Class
步骤2:页面注册并使用自定义控件
在页面顶部注册自定义控件:
<%@ Register TagPrefix="custom" Namespace="YourProjectNamespace" Assembly="YourProjectAssembly" %>
替换原有的FilteredTextBoxExtender:
<custom:ConfigurableFilteredTextBoxExtender ID="txtLTWo_Filteredtextboxextender" TargetControlID="txtLTWo" runat="server" />
这样所有页面无需编写任何后台配置代码,控件会自动读取web.config的配置生效,后续修改配置或规则只需调整工具类或web.config。
方案3:灵活配置枚举值(支持直接在web.config定义FilterType)
如果想直接在web.config中写FilterType的枚举值(比如LowercaseLetters,UppercaseLetters),可以修改工具类支持枚举解析:
步骤1:修改web.config配置
<appSettings> <add key="FilterType" value="LowercaseLetters,UppercaseLetters,Numbers" /> <add key="CustomValidChars" value="!QW" /> </appSettings>
步骤2:更新工具类的解析逻辑
Public Shared Function GetTargetFilterType() As FilterTypes Dim configValue = ConfigurationManager.AppSettings("FilterType") If String.IsNullOrEmpty(configValue) Then Return FilterTypes.None Dim result = FilterTypes.None ' 分割配置值并解析枚举 For Each typeName In configValue.Split(","c, StringSplitOptions.RemoveEmptyEntries) If [Enum].TryParse(typeName.Trim(), True, Dim parsedType As FilterTypes) Then result = result Or parsedType End If Next Return result End Function
这种方式更灵活,无需修改工具类,直接在web.config中组合需要的过滤类型即可。
内容的提问来源于stack exchange,提问作者SoundWaves
相关产品推荐
相关产品推荐

