2013-04-17 25 views
2

說明:我有兩個文本框,用戶可以選擇填寫兩個文本框,但強制用戶填寫其中至少一個。只需要兩個文本框中的一個(自定義驗證程序)

預期結果:錯誤信息中顯示 意外的結果:沒有顯示錯誤消息

HTML:

<asp:TextBox ID="TB1" runat="server" /> 
<asp:CustomValidator ID="CV1" ControlToValidate="TB1" runat="server" OnServerValidate="blabla" ErrorMessage="one of two required" /> 
<asp:TextBox ID="TB2" runat="server" /> 
<asp:CustomValidator ID="CV2" ControlToValidate="TB2" runat="server" OnServerValidate="blabla" ErrorMessage="they cant both be blank" /> 

C#:

protected void blabla(object sender, ServerValidateEventArgs e) 
{ 
    if (TB1.Text.Length == 0 && TB2.Text.Length == 0) 
     e.IsValid = false; 
    else 
     e.IsValid = true; 
} 

請你能幫助解釋爲什麼不是這些工作的傢伙?

+0

你真正想要的是什麼。解釋簡要.................. ?????? –

+6

什麼不起作用? blabla事件是否被提出?你是否遇到異常?它是不是像你所期望的那樣表現? – Belogix

+0

只有一個,或者至少一個?另外,解釋你正在努力完成的事情。 – Novak

回答

5

你只需要兩個一個CustomValidator。這是唯一的驗證器,您可以省略ControlToValidate這種情況。

ASPX:

<asp:TextBox ID="TB1" runat="server" /> 
<asp:TextBox ID="TB2" runat="server" /> 
<asp:CustomValidator ID="CV1"runat="server" 
    OnServerValidate="ServerValidation" 
    ErrorMessage="one of two required" /> 

代碼隱藏:

protected void ServerValidation(object source, ServerValidateEventArgs args) 
{ 
    args.IsValid = TB1.Text.Trim().Length > 0 || TB2.Text.Trim().Length > 0; 
} 
+0

進行比較,真的很長或者語句如此會更喜歡這個。這真是太棒了,非常感謝你。 – Arshad

+1

+1一如既往的好答案。你也可以做客戶端驗證。 –

1

&&意味着and中如果兩個長度爲0,那麼它的無效,嘗試

bool b = false; 
if (TB1.Text.Length != 0) 
b = true; 

if (TB2.Text.Length != 0) 
b = true; 

e.IsValid = b; 
+0

注:我更喜歡Tim的答案,雖然我不是一個粉絲如果需要額外的文本框來與 – Sayse

0

試試這個:

protected void blabla(object sender, ServerValidateEventArgs e) 
{ 
    if (string.IsNullOrEmpty(TB1.Text) && string.IsNullOrEmpty(TB2.Text)) 
     e.IsValid = false; 
    else 
     e.IsValid = true; 
} 

而且使用ValidationGroup屬性可能是有用的:

<asp:TextBox ID="TB1" runat="server" /> 
<asp:CustomValidator ID="CV1" ControlToValidate="TB1" runat="server" OnServerValidate="blabla" ErrorMessage="one of two required" validationgroup="validationGroup" /> 
<asp:TextBox ID="TB2" runat="server" /> 
<asp:CustomValidator ID="CV2" ControlToValidate="TB2" runat="server" OnServerValidate="blabla" ErrorMessage="they cant both be blank" validationgroup="validationGroup" /> 

<asp:button id="ValidateButton" text="Validate" validationgroup="validationGroup" runat="server"/> 
+0

使用Tim的方法只使用一個自定義驗證器可以更輕鬆地解決問題,但非常感謝您的回覆。 – Arshad

相關問題