ASP.NET 2.0 WebControlAdapters不能用于Validator控件?

时间:2010-05-21 11:57:19

标签: asp.net validation adapter

我正在页面上使用CompareValidator,我添加了一个ControlAdapter(通过浏览器文件)来监视所有BaseValidator类(及其派生类)。我的ControlAdapter什么都不做 - 目前没有覆盖任何方法。验证器写入span标记,它的id和样式,但没有别的 - 没有错误消息,没有javascript。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

糟糕;写得太快了。答案是:标准的WebControlAdapter会覆盖Render()方法 - 这是Validator处理发生的地方。解决方案是将抽象的System.Web.UI.Adapters.ControlAdapter子类化并创建自己的适配器(实际上可以为空)。

public class ValidatorAdapter : System.Web.UI.Adapters.ControlAdapter { }
public class FieldError : ValidatorAdapter
{
    protected void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.AddAttribute(HtmlTextWriterAttribute.Class, "fieldError");
        writer.RenderBeginTag(HtmlTextWriterTag.Div);
    }
    protected override void Render(HtmlTextWriter writer)
    {
        RenderBeginTag(writer);
        base.Render(writer);
        RenderEndTag(writer);
    }
    protected void RenderEndTag(HtmlTextWriter writer)
    {
        writer.RenderEndTag();
    }
}

并将其添加到浏览文件中:

        <adapter controlType="System.Web.UI.WebControls.BaseValidator"
            adapterType="UI.ControlAdapters.FieldError"
            />