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