手动显示字段验证器(ASP.NET / C#)

时间:2011-03-07 13:10:01

标签: c# asp.net validation

想象一下联系表单的场景,即收集数据并通过电子邮件进一步传输到适当的地址。其中一个重要的字段是要求提供电子邮件地址,这对于回调电话非常重要。

所以说我使用RequiredFieldValidator检查邮件地址字段中的内容,任何内容的输入;进一步检查代码将确定所提供的邮件地址是否可用。

鉴于这两项检查基本上都是验证,我只想重新使用代码隐藏中的RequiredFieldValidator; 这可能吗?

例如,简单如下:

MyValidator.Show();
return;

我过去所做的就是在表单中添加Label,并使用类似的策略,只需根据需要显示控件并返回。理想情况下,我想完全摆脱这一点,只需使用一个控件输出我的错误信息。

对于当前代码的概念,下面是一个骨架列表,即使如此,它也是整个概念:

在页面内:

<asp:TextBox runat="server" ID="MailAddressTextBox" />

<asp:RequiredFieldValidator runat="server" ID="MailAddressValidator" ErrorMessage="Enter a valid mail address" ControlToValidate="MailAddressTextBox" />

<asp:Label runat="server" ID="MailAddressError" Text="Enter a valid mail address" Visible="false" />

在代码隐藏中:

MailAddress enquirerMail;
try
{
    enquirerMail = new MailAddress(MailAddressTextBox.Text);
}
catch
{
    MailAddressError.Visible = true;
    return;
}
除了显而易见的额外控制之外,隐藏/显示错误标签的方法的缺陷是维护其可见性,还有每个错误的标签,或消息列表以及显示器的代码内更改

此外,多个验证器是我想要避免的,至少在这个特定的实例中是这样;一个RegularExpressionValidator不会在这里删除它,因为我们都知道只选择“最佳”正则表达式来解析邮件地址本身就是一个壮举,或者它可能包含比实际页面内容+标记更多的字符。

我厌恶正则表达式的另一个原因是,如果你需要,我最终必须实现上述try / catch验证,因为即使是“经过验证”的地址也可能导致MailAddress失败构造

所以,重申一下: 我可以从代码隐藏中激活/重用我的验证器吗?

2 个答案:

答案 0 :(得分:3)

我真的认为如果你要验证两件事(事实上该字段不是空的并且事实上它是一个有效的地址),那么你应该有两个验证器。

但是,要回答你的问题,你可以这样做:

MailAddressValidator.ErrorMessage = "Invalid email address";
MailAddressValidator.IsValid = false;

答案 1 :(得分:1)

如果你真的想避免使用多个验证器(我可以理解为什么,生成“内联”错误消息不会像两个或更多验证控件一样整洁),我建议使用单个custom validator

这意味着您可以编写自己的验证代码(包括用户未提供ANYTHING的情况和其他提供无效电子邮件地址的情况)并且可以精确控制所呈现的错误消息。