2010-10-06 57 views
1

我正在處理一個頁面,該頁面有一系列複選框,至少必須選中一個框。多個控件上的asp.net CustomValidator

當我點擊提交按鈕時,驗證器觸發,如果沒有選中複選框,則表示驗證失敗。但是,如果我選中其中一個複選框,驗證消息不會消失,直到我再次單擊提交按鈕。

如果我在一個指定了ControlToValidate的控件上使用它並且我修復了驗證問題,那麼錯誤消息立即消失。

但是在這種情況下,我不設置ControlToValidate,因爲需要驗證幾個獨立的控件。

所以我的問題是我可以導致自定義驗證程序的重新驗證?例如,我想在每個複選框上添加一個onclick =「revalidate()」,然後強制驗證再次發生。

這裏是我寫的一些示例代碼來演示場景。

<script type="text/javascript"> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    function IsOneCheckboxChecked(sender, args) { 
     if (!$('[id$=checkBox1]').attr('checked') && 
    !$('[id$=checkBox2]').attr('checked')) { 
      args.IsValid = false; 
     } 
     else { 
      args.IsValid = true; 
     } 
    } 
</script> 



<asp:CheckBox ID="checkBox1" runat="server" /> 
<br /> 
<asp:CheckBox ID="checkBox2" runat="server" /> 
<br /> 
<asp:CustomValidator ID="customValidatorMustBeOnCheckboxChecked" 
    runat="server" ClientValidationFunction="IsOneCheckboxChecked" 
    ErrorMessage="You must select at least one checkbox option" 
    OnServerValidate="customValidatorMustBeOnCheckboxChecked_ServerValidate" /> 
<br /> 
<br /> 
<asp:Button ID="buttonSubmit" runat="server" Text="Submit" /> 
+0

在你的CustomValidator標籤,你嘗試包括顯示= 「動態」? – TheGeekYouNeed 2010-10-06 23:40:12

+0

顯示只決定錯誤消息的位置是靜態的還是動態的。不過,我繼續嘗試你的建議,但沒有什麼區別。 – 2010-10-06 23:45:57

回答

1

嗯,我是能夠通過發現控制驗證創建的跨度,在我重新驗證方法隱藏到解決問題或將暴露的錯誤消息。不過,我想想更好的存在嗎?

我創建了這個博客條目:

http://coding.infoconex.com/post/ASPNET-CustomValidator-that-validates-multiple-controls-using-both-Server-Side-and-Client-Side-scripting.aspx

function Revalidate() { 
     if (!$('[id$=checkBox1]').attr('checked') 
     && !$('[id$=checkBox2]').attr('checked')) { 
      var control = $('[id$=customValidatorMustBeOnCheckboxChecked]'); 
      control.css('display', 'inline'); 
     } 
     else { 
      var control = $('[id$=customValidatorMustBeOnCheckboxChecked]'); 
      control.css('display', 'none'); 
     } 
    } 

<asp:CheckBox ID="checkBox1" runat="server" onclick="Revalidate()" /> 
<br /> 
<asp:CheckBox ID="checkBox2" runat="server" onclick="Revalidate()" /> 
+0

當然必須有更好的方法?沒有? – 2010-10-11 23:22:08

2

是有提交被點擊之前重新確認的一種方式。 ASP.NET構建一個'onBlur'事件,綁定到您在JavaScript中驗證的控件,該控件運行您在客戶端驗證函數中定義的代碼。這是正在運行,但當然你是點擊一個複選框,然後再次提交 - onBlur只有在你清除郵件之前點擊其他地方時纔會啓動。所以我會在用戶進入提交按鈕之前調用一個mouseleave或mouseover事件的客戶端驗證函數。這將清除消息並保持您的args.IsValid設置正確,所以當用戶單擊提交時,錯誤消息消失並且表單驗證。

例如:

$(".submitButtonDiv").mouseenter(function() { 
    IsOneCheckboxChecked(); 
});