2010-10-12 105 views
6

我有一個asp.net webform上的三個文本框,我/我可以如何使用必需的字段驗證器,以確保其中至少有一個包含文本?asp.net必填字段驗證至少有一個文本框包含文本

+0

可能重複的[asp.net驗證文本框 - 至少一個文本框必須有數據](http://stackoverflow.com/questions/1443545/asp-net-validate-textbox-at-least-one-文本框必須有數據輸入) – 2013-10-03 22:37:05

回答

15

我會用這樣的CustomFieldValidator:

<asp:CustomValidator runat="server" 
     ID="MyCustomValidator" 
     ValidationGroup="YOUR_VALIDATION_GROUP_NAME" 
     OnServerValidate="MyCustomValidator_ServerValidate" 
     ErrorMessage="At least one textbox needs to be filled in." /> 

,然後在你的代碼隱藏您有:

protected void MyCustomValidator_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    if (/* one of three textboxes has text*/) 
     args.IsValid = true; 
    else 
     args.IsValid = false; 
} 

您還可以添加一個客戶端組件來此驗證,並使它通過使用AJAX工具包的ValidatorCalloutExtender控件進行擴展來實現性感。

+0

我不喜歡這導致回發所以我剛剛結束了設置ClientIDMode =「靜態」和硬編碼JS函數中的值。我對做任何錯誤消息或任何事情都不感興趣;我只是想讓按鈕什麼都不做。感謝代碼。它完全工作,它只是使用CustomValidator是錯誤的選擇。這是我的錯,不是你的。 – Shawn 2010-10-13 04:01:31

+0

我發現這不會觸發驗證與指定的ValidationGroup。一旦我拿出來,它就像一個魅力。 – techturtle 2013-06-07 19:09:19

13

我不認爲RequiredFieldValidator符合您的要求。我會去CustomValidator分配給你的任何領域,並手動檢查他們所有的火災。

<script> 
    function doCustomValidate(source, args) { 

     args.IsValid = false; 

     if (document.getElementById('<% =TextBox1.ClientID %>').value.length > 0) { 
      args.IsValid = true; 
     } 
     if (document.getElementById('<% =TextBox2.ClientID %>').value.length > 0) { 
      args.IsValid = true; 
     } 
     if (document.getElementById('<% =TextBox3.ClientID %>').value.length > 0) { 
      args.IsValid = true; 
     } 
    } 
</script> 

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
<asp:CustomValidator ID="CustomValidator1" runat="server" 
     ErrorMessage="have to fill at least 1 field" 
     ControlToValidate="TextBox1" 
     ClientValidationFunction="doCustomValidate" 
     ValidateEmptyText="true" ></asp:CustomValidator><br /> 
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> 
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br /> 

不要忘記設置ValidateEmptyText="true"作爲默認是跳過空字段。確保你也創建了一個類似的服務器端驗證方法。