2009-01-20 29 views
12

如何最好地將JQuery與ASP.NET客戶端驗證模型結合起來?將ASP.NET驗證與JQuery相結合的優雅方式

我通常避免實現ASP.NET驗證模型,因爲它總是看起來矯枉過正我正在做的事情。對於我正在處理的網站,我只是收集非關鍵用戶數據,只需要一些基本的驗證。我不想要消息出現在DOM或類似的東西。無論如何,我一直覺得很難讓它看起來很正確。

但我現在需要實現一些更優雅的東西。我想在JQuery中利用的是聰明的搜索表達式,例如'告訴我是否至少有一個複選框被選中'。我是JQuery的新手,但我認爲這是約1行JQuery,在傳統的ASP.NET模型中更加複雜。

所以我想充分利用JQuery的能力,但不是完全不顧ASP.NET的驗證模型。

我的最好的辦法,到目前爲止是這樣的(這幾乎進入ASP.NET的背後):

$('#<%=btnJoinMailingList.ClientID %>').bind('click', function(event) { 

    if (...) { 
     alert("You must enter a name"); 
     return false; 
    }  
    return true; 
}); 

這裏有什麼更好的辦法?有沒有推薦的JQuery插件?

PS。我不想使用MVC模型。我正在嘗試創建一個非常'RAD'的網站,但沒有時間去研究那些有趣的新東西。

回答

5

ASP.NET webforms和jQuery的驗證模型非常非常類似於恕我直言,因爲它們都是客戶端,實現其中一個並不一定會破壞另一個。唯一真正的區別是,在後臺,ASP.NET驗證器將導致Page.Validate()方法返回false,如果您有未驗證的字段。

你可能會選擇手動推出自己的驗證控件,然後導致相同的行爲,但正如你自己所說的那樣,這可能是矯枉過正。

jQuery也有自己的Validator插件,你可能想看看:http://docs.jquery.com/Plugins/Validation/Validator

12

ASP.NET有許多驗證控件,其中之一是CustomValidator
您可以給它一個使用jQuery的自定義JavaScript函數,並通過參數返回truefalse。您可以使用此控件自動顯示錯誤消息,或者只運行jQuery代碼並手動處理顯示。

.aspx的:

<asp:CustomValidator ID="CustomValidator1" runat="server" Display="None" 
        ClientValidationFunction="checkTextareaLengths"> 
</asp:CustomValidator> 

的JavaScript:

function checkTextareaLengths(source, args){ 
    args.IsValid = true; 
    $('textarea').each(function(){ 
    if($(this).text().lenght > 400) 
     args.IsValid = false; 
    }); 
} 
+0

注:我不認爲只是返回true或false去上班 - 你需要接受2個PARAMS的函數(發件人,參數)並設置ARGS。IsValid = ok;最後爲了與webforms驗證框架一起玩。 – chris 2011-04-06 18:40:19

+0

@chris - 非常真實 - 我知道更好知道。你知道嗎,我會更新答案! – Kobi 2011-04-06 18:41:17

5

ASP.NET驗證是附加屬性的跨度。 使用jquery,你可以訪問頁面上的所有驗證器或通過jQuery支持的任何標準 來過濾它們。通過JavaScript調用ValidatorValidate函數強制驗證。 例如:

function validate_step(step_element) { 
     // find all validators on step_element and force validation 
     var validators = $(step_element).find("span[controltovalidate]"); 
     var stepIsValid = true; 
     validators.each(function() { 
      ValidatorValidate(this); stepIsValid &= this.isvalid; 
     }); 
     return stepIsValid; 
    }