验证器控件必须始终具有Display =“Dynamic”

时间:2012-07-28 21:15:59

标签: c#

我一直在研究这个问题已经有一段时间了,但我似乎无法找到答案...... Google今天对我没有帮助!

我正在使用一个C#网站,该网站使用了很多表单并对其进行了大量验证。必须手工输入的大型表格(虽然没有问题)。

我遇到的问题是我总是希望我的ValidationControls将Display Property设置为动态。

我找到了解决办法,但我不相信这是最好的解决方案。

目前我有一个BaseValidatorControlAdapter,它将验证器显示类型设置为“动态”,如下所示:

public class BaseValidatorControlAdapter : ControlAdapter
{
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        System.Web.UI.WebControls.BaseValidator _control = (System.Web.UI.WebControls.BaseValidator)this.Control;
        _control.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
        base.Render(writer);
    }
}

然后通过添加类似于此

的App_Browser来触发此操作
<browsers>
    <browser refID="Default">
        <controlAdapters>
            <adapter controlType="System.Web.UI.WebControls.BaseValidator"
                     adapterType="BaseValidatorControlAdapter" />
        </controlAdapters>
    </browser>
</browsers>

我的问题是。是否可以为任何验证器控件设置Display的默认值。因为我现在的解决方案只是覆盖了现在的解决方案,所以没有办法改变它。因此,当情况出现我确实需要其他东西然后在显示选项中动态时,没有解决方案。

我几乎确信有更好的解决方案。

感谢任何建议!

编辑2012年8月2日:

我最终解决了覆盖默认asp.net控件的解决方案并将以下构造函数添加到它们

public controlname ()
  : base ()
{
    this.Display = "Dynamic";
}

我将所有这些控件添加到命名空间,现在我可以

<validator:RequiredField ID="RqrdFld_x" runat="server" Display="Static" />

基本上覆盖控件定义中的默认值,并覆盖构造函数中默认控件的Dynamic值。

2 个答案:

答案 0 :(得分:2)

您可以在Page_Init事件中使用此类代码:

foreach(Control control in Page.Controls){
  if(control is System.Web.UI.WebControls.BaseValidator)
  {
     control.Display = "Static";
  }
}

它将找到所有控件并相应地设置Display属性。

答案 1 :(得分:2)

link应该有助于解决您的问题。

您可以使用外观文件为.NET站点上的Web控件设置默认值。

我在App_Theme文件夹中添加了一个名为DefaultTheme的文件夹,并添加了一个名为Skin.skin的文件,其中包含以下内容:

<asp:RequiredFieldValidator runat="server" Display="Dynamic" />
<asp:CompareValidator runat="server" Display="Dynamic" />
<asp:RegularExpressionValidator runat="server" Display="Dynamic" />

..允许我在我的网站上为许多不同的验证器(或其他控件)设置默认设置。