簡體   English   中英

手動顯示字段驗證器(ASP.NET / C#)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM