Asp.net自定义验证器控件

时间:2013-03-13 13:04:21

标签: asp.net webforms

这是我的问题: 我们在某些领域使用自定义验证器。现在我们想要更改验证标记。现在这是这样的: <span id="CreateProfile_EmailValidator">Email is in Incorrect Format</span>

我可以以某种方式更改此标记吗? 例如,添加一些<div>元素?

UPD:我看起来不是一次性的解决方法。 (请参阅关于MikeSmithDev答案的讨论)

2 个答案:

答案 0 :(得分:3)

您可以继承BaseValidatorCustomValidator类并覆盖Render方法,然后生成所需的任何标记。

public class MyCustomValidator : CustomValidator
{
    protected override void Render(HtmlTextWriter writer)
    {
        writer.RenderBeginTag("div");
        base.Render(writer);
        writer.RenderEndTag();
    }
}

答案 1 :(得分:2)

使用WebControlAdapter更改CustomValidator的呈现方式。您需要覆盖RenderBeginTagRenderEndTag方法,以围绕默认范围呈现div。

public class CustomValidatorAdapter : WebControlAdapter
{
    protected override void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.RenderBeginTag("div");
                base.RenderBeginTag(writer);
    }

    protected override void RenderEndTag(HtmlTextWriter writer)
    {
                base.RenderEndTag(writer);
        writer.RenderEndTag(); // this will close div
    }
}

要将此适配器连接到您的应用程序,您有两个选择。首先是在页面构造函数

中以编程方式执行此操作
var adapters = Context.Request.Browser.Adapters;
var customValidatorType = typeof(CustomValidator).AssemblyQualifiedName;
var adapterType = typeof(CustomValidatorAdapter).AssemblyQualifiedName;
if (!adapters.Contains(customValidatorType))
{
    adapters.Add(customValidatorType, adapterType);
}

第二个选项是使用.browser文件:

将新的Browser File添加到您的项目中。它将驻留在App_Browsers文件夹中。然后用以下声明替换内容:

<browsers>
    <browser refID="Default">
            <controlAdapters>
                <adapter controlType="System.Web.UI.WebControls.CustomValidator" 
                         adapterType="<your namespace>.CustomValidatorAdapter" />
            </controlAdapters>
    </browser>
</browsers>