這是一個使用CustomValidator並需要進行一些組織更改的解決方案。這需要回發,因爲CustomValidator驗證在服務器端執行。
這裏的設置:
- 對於每個顯示「請提供‘姓名’字段文本」的消息現有RequiredFieldValidators,你將需要設置:
- EnableClientScript =」假「
- ValidationGroup =」vgTxtName「(提供您自己的名稱)
- ErrorMessage =」「(或者將其完全移除; CustomValidator現在將響應ible for this)
您可以選擇不顯示任何內容(對用戶不太清楚)或顯示星號以指示哪個驗證器無效。
選項1:
選項2(優選的):
- 您的ValidationSummary控件無需進行任何更改(它應該是中性的,並且沒有設置ValidationGroup屬性,這是默認設置)
- 添加的CustomValidator(參見下面的代碼)
- 添加事件處理程序爲的CustomValidator的的ServerValidate事件(你可以增加一倍,從設計師單擊它有它產生的)
- 實現的事件處理程序邏輯(見下面的代碼)
的想法是不是直接讓頁面再處理那些RequiredFieldValidators相反,我們將讓的CustomValidator做到這一點。
文本框的RequiredFieldValidator例如(你應該有一些看起來像這樣有關的ID名稱對應上面的步驟1):
選項1:
<asp:RequiredFieldValidator ControlToValidate="txt1" ID="rfv1" runat="server"
EnableClientScript="false" Display="None" ValidationGroup="vgTxtName" />
選項2:
<asp:RequiredFieldValidator ControlToValidate="txt1" ID="rfv1" runat="server"
EnableClientScript="false" Display="Dynamic" ValidationGroup="vgTxtName">*
</asp:RequiredFieldValidator>
CustomValidator標記(您可以將第是明智的任何地方,比如旁邊ValidationSummary控件):
<asp:CustomValidator ID="cvName" runat="server" Display="None"
ErrorMessage="Please provide text for 'Name' field"
OnServerValidate="cvName_ServerValidate" />
錯誤消息在這裏取代了個人驗證的人。另外請注意,沒有ControlToValidate集合,它對此類驗證器有效,對於應用包含多個控件的驗證非常有用。
的CustomValidator事件處理(cvName_ServerValidate):
protected void cvName_ServerValidate(object source, ServerValidateEventArgs args)
{
// Validate vgTxtName group
Page.Validate("vgTxtName");
// .NET 3.5 - add using System.Linq;
args.IsValid = Page.GetValidators("vgTxtName")
.OfType<RequiredFieldValidator>()
.All(v => v.IsValid);
// .NET 2.0 (use either this or the above, not both)
bool isValid = true;
foreach (RequiredFieldValidator validator in Page.GetValidators("vgTxtName"))
{
isValid &= validator.IsValid;
}
args.IsValid = isValid;
}
這就是它!請記住,這僅限於RequiredFieldValidators。您不應在「vgTxtName」組中放置不同類型的驗證程序,因爲cvName邏輯嚴格處理RequiredFieldValidator類型。如果您打算使用其他驗證器類型,則需要設置不同的分組或調整代碼。