2013-05-28 97 views
16

我有如下驗證,但只有當勾選複選框時纔會觸發。asp:RequiredFieldValidator驗證根據條件

<!-- TextBox and its validator --> 
Name: <asp:TextBox ID="TextBox1" runat="server" /> 

<asp:RequiredFieldValidator runat="server" 
     ID="RequiredFieldValidator1" 
     Text="*" 
     ErrorMessage="Name is required" 
     ControlToValidate="TextBox1" /> 

我可以用asp:RequiredFieldValidator完成它嗎?
我只想驗證某個條件是否匹配。
當前每次單擊「保存」按鈕時都會進行驗證。

+1

使用「CustomValidator」代替 – mshsayem

+0

任何示例?我的驗證器需要基於多個控件和條件的交互。 – ove

回答

7

我很容易解決這個問題,在客戶端添加以下javascript。

ValidatorEnable(document.getElementById("RequiredFieldValidator1"), true); or 
ValidatorEnable(document.getElementById("RequiredFieldValidator2"), false); 
+0

精彩!有點黑客,但很聰明。 – Jaider

+4

在這種情況下,Page.IsValid將爲false –

28

使用自定義的驗證,而不是:

<asp:CustomValidator ID="cv1" runat="server" 
     ErrorMessage="Name is required" 
     Text="*" 
     ControlToValidate="TextBox1" 
     ValidateEmptyText="True" 
     ClientValidationFunction="validate" /> 

和腳本(只檢查一個複選框和文本框的值作爲例子,你可以使用自定義邏輯):

<script type="text/javascript"> 
    function validate(s,args){ 
     if(document.getElementById("<%= checkboxId.ClientID %>").checked){ 
      args.IsValid = args.Value != ''; 

     } 
     else{ 
      args.IsValid = true; 
     } 
    } 
</script> 

這將做客戶端驗證。如果您還需要服務器驗證,請添加OnServerValidate屬性以及代碼後面的處理程序。 See here for details

+9

注意:如果您想知道爲什麼它不會在空的文本框中觸發,則必須在CustomValidator上設置「ValidateEmptyText =」True「'。 – arnaudoff

0

你也可以試試這個

protected void CheckBox_CheckedChanged(object sender, EventArgs e) 
{ 

    if(CheckBox.Checked) 
    { 
     RequiredFieldValidator1.Enabled = true; 
     RequiredFieldValidator1.ValidationGroup = "anything"; 
     Button1.ValidationGroup = "anything";// your save button 

    } 
    else 
    { 
     RequiredFieldValidator1.Enabled = false; 
     RequiredFieldValidator1.ValidationGroup = string.Empty; 
     Button1.ValidationGroup = string.Empty; // save button 
    } 
} 
+0

沒有我的代碼,但我不認爲這將工作,因爲我們正在做客戶端驗證和代碼背後的代碼不會受到打擊? – ove

+0

和我下面的評論一樣。我已經確認了in_visible在說什麼。這個工作直到驗證器啓動。一旦啓動,除非您滿意,否則無法回發以禁用驗證器。 –

0

嘗試......

protected void RequiredFieldValidator1_Load(object sender, EventArgs e) 
{ 
    if (CheckBox1.Checked == true) 
    { 
     RequiredFieldValidator1.Enabled = true; 
    } 
    else if (CheckBox1.Checked == false) 
    { 
     RequiredFieldValidator1.Enabled = false; 
    } 
} 
+1

與我對其他答案的回覆類似。 「沒有我的代碼,但我不認爲這將工作,因爲我們正在做客戶端驗證,並且代碼背後的代碼不會被打到?」 – ove

+0

這個工作直到驗證器啓動。一旦啓動,除非您滿意,否則無法回發以禁用驗證器。 –

0

您可以啓用/禁用的的RequiredFieldValidator將Javascript/jQuery的。 根據您的情況,當複選框被選中時: - 只需調用javascript函數啓用RequiredFieldValidator,並在其取消選中時僅關閉RequiredFieldValidator。

的其他條件等下拉指數變化,文本框的值的變化和單選按鈕選擇變化可以調用其平變化,的onblur,分別的onclick和 執行所要求的條件後,可以啓用/禁用的RequiredFieldValidator

希望這對你有所幫助。