2010-05-21 41 views
1

我在頁面上使用CompareValidator,並且我添加了一個ControlAdapter(通過browserfile)來觀察所有BaseValidator類(及其派生類)。我的ControlAdapter什麼都不做 - 當前不覆蓋任何方法。驗證器編寫span標籤,它是id和style,但沒有別的 - 沒有錯誤消息,沒有javascript。任何想法爲什麼?ASP.NET 2.0 WebControlAdapters不能用於Validator控件?

回答

1

哎呦;寫得太快了。答案是:標準的WebControlAdapter覆蓋了Render()方法 - 這是Validator處理髮生的地方。解決方案是繼承抽象System.Web.UI.Adapters.ControlAdapter並創建自己的Adapter(實際上可以爲空)。

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" 
      />