2013-03-13 142 views
0

这是我的问题: 我们对某些字段使用自定义验证器。现在我们要更改验证标记。现在这是这样的: <span id="CreateProfile_EmailValidator">Email is in Incorrect Format</span>Asp.net自定义验证器控件

我可以以某种方式更改此标记吗? 例如,添加一些<div>元素?

UPD:我看了不是一次解决方法。 (请参阅MikeSmithDev的回答讨论)

+0

你是什么意思?你可以将一个类('CssClass')应用到验证器。此外,RegularExpressionValidator适用于电子邮件。 – MikeSmithDev

+0

@MikeSmithDev我现在谈论'CssClass',但我需要''使用'div'和其他html元素。 –

回答

3

您可以从BaseValidatorCustomValidator类继承并重写Render方法,然后生成你想要的任何标记。

public class MyCustomValidator : CustomValidator 
{ 
    protected override void Render(HtmlTextWriter writer) 
    { 
     writer.RenderBeginTag("div"); 
     base.Render(writer); 
     writer.RenderEndTag(); 
    } 
} 
2

使用WebControlAdapter来更改呈现方式CustomValidator。你会想要覆盖RenderBeginTagRenderEndTag方法来渲染div的默认范围。

public class CustomValidatorAdapter : WebControlAdapter 
{ 
    protected override void RenderBeginTag(HtmlTextWriter writer) 
    { 
     writer.RenderBeginTag("div"); 
       base.RenderBeginTag(writer); 
    } 

    protected override void RenderEndTag(HtmlTextWriter writer) 
    { 
       base.RenderEndTag(writer); 
     writer.RenderEndTag(); // this will close div 
    } 
} 

要将此适配器连接到您的应用程序,您有两个选项。首先是做编程的页面构造

var adapters = Context.Request.Browser.Adapters; 
var customValidatorType = typeof(CustomValidator).AssemblyQualifiedName; 
var adapterType = typeof(CustomValidatorAdapter).AssemblyQualifiedName; 
if (!adapters.Contains(customValidatorType)) 
{ 
    adapters.Add(customValidatorType, adapterType); 
} 

第二个选择是使用.browser文件:

添加新Browser File到您的项目。它将驻留在App_Browsers文件夹中。然后用以下声明替换内容:

<browsers> 
    <browser refID="Default"> 
      <controlAdapters> 
       <adapter controlType="System.Web.UI.WebControls.CustomValidator" 
         adapterType="<your namespace>.CustomValidatorAdapter" /> 
      </controlAdapters> 
    </browser> 
</browsers>