[英]Display Field Validators Manually (ASP.NET/C#)
想象一下聯系表單的場景,即收集數據並通過電子郵件進一步傳輸到適當的地址。 其中一個重要字段是要求提供電子郵件地址,這對於回撥非常重要。
所以說我使用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
構造函數失敗。
所以,重申一下: 我可以從代碼隱藏中激活/重用我的驗證器嗎?
我真的認為,如果你正在驗證兩件事(事實上該字段不是空的事實以及它是一個有效的地址),那么你應該有兩個驗證器。
但是,要回答你的問題,你可以這樣做:
MailAddressValidator.ErrorMessage = "Invalid email address";
MailAddressValidator.IsValid = false;
如果你真的想避免使用多個驗證器(我可以理解為什么,生成“內聯”錯誤消息不會像兩個或更多驗證控件一樣整潔),我建議使用一個自定義驗證器 。
這意味着您可以編寫自己的驗證代碼(包括用戶未提供ANYTHING的情況和其他提供無效電子郵件地址的情況)並且可以精確控制呈現的錯誤消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.