想象一下联系表单的场景,即收集数据并通过电子邮件进一步传输到适当的地址。其中一个重要的字段是要求提供电子邮件地址,这对于回调电话非常重要。
所以说我使用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
失败构造
所以,重申一下: 我可以从代码隐藏中激活/重用我的验证器吗?
答案 0 :(得分:3)
我真的认为如果你要验证两件事(事实上该字段不是空的并且事实上它是一个有效的地址),那么你应该有两个验证器。
但是,要回答你的问题,你可以这样做:
MailAddressValidator.ErrorMessage = "Invalid email address";
MailAddressValidator.IsValid = false;
答案 1 :(得分:1)
如果你真的想避免使用多个验证器(我可以理解为什么,生成“内联”错误消息不会像两个或更多验证控件一样整洁),我建议使用单个custom validator。
这意味着您可以编写自己的验证代码(包括用户未提供ANYTHING的情况和其他提供无效电子邮件地址的情况)并且可以精确控制所呈现的错误消息。