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