1

我在页面上使用了 CompareValidator,并添加了一个 ControlAdapter(通过浏览器文件)来查看所有 BaseValidator 类(及其派生类)。我的 ControlAdapter 什么都不做 - 目前没有覆盖任何方法。验证器写入 span 标签,它是 id 和 style,但没有其他内容 - 没有错误消息,没有 javascript。任何想法为什么?

4

1 回答 1

2

哎呀;写得太早了。答案是:标准的 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"
            />
于 2010-05-21T13:37:28.050 回答