17

我在ASP.net MVC 3以下幾種觀點:ASP.net MVC驗證掛鉤

​​

我使用與jQuery和流利的驗證框架不顯眼的JavaScript。

當我點擊保存按鈕並驗證失敗時,是否有一些事件可以調用某些自定義JavaScript?

function validationFailed() { 
    // do something here only if validation failed 
} 

我怎麼會扎入驗證,這樣,當它失敗(且僅當它失敗)我可以打電話給我validationFailed()函數。

+0

你究竟想要做什麼?我知道你想運行一些JavaScript,如果它失敗了,但是通過這樣做試圖達到什麼目的? –

回答

3

你可以使用invalidHandler,我相信是在jquery驗證。

invalidHandler回調
回調的自定義代碼,當一個無效的表單提交。調用 ,事件對象作爲第一個參數,驗證器作爲 秒。

+0

如果我使用數據註釋或流利驗證,這是否會影響我在我的視圖中創建驗證處理程序? – Dismissile

+0

這只是當提交的表單無效時觸發的回調。所有通過數據註釋創建的驗證等都將正常工作。 –

+0

這不起作用。當我將validate()添加到我的表單時,它會被忽略。我認爲數據註釋創建的驗證處理程序與我嘗試手動添加的處理程序之間存在衝突。 – Dismissile

35

在jQuery /驗證文檔說,你可以使用invalidHandler當一個無效的形式提交給反應。

但是,由於MVC不顯眼的驗證實例化驗證本身,因此您必須稍後掛接此事件。

使用與jQuery/Validation完全相同的機制:您可以將您的代碼綁定到表單元素自定義事件'invalid-form.validate',女巫對應於invalidHandler!

$(document).ready(function() { 
    $('#myform').bind('invalid-form.validate',function(){ 
     alert('invalid form!'); 
    }); 
}); 

給您形式的ID使用:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myform" })) { 
} 

更新:

的另一種方式獲得現有的驗證對象調用的validate()在窗體上。如果這種形式驗證程序已經創建,它會被退回:

編輯:初始化後發生,改變.settings.invalidHandler是爲時已晚綁定。因此,除非您重新啓動驗證程序,否則以下代碼段將不再有效。

$(document).ready(function() { 
    var existingValdiation = $("#myform").validate(); 
    //the settings property corresponds to the options parameter 
    existingValdiation.settings.invalidHandler = function (form) { 
     alert('invalid form!'); 
    }; 
    // not recommended: 
    // re-init would bind settings.invalidHandler to 'invalid-form.validate' 
    // existingValdiation.init(); 
}); 
+0

第一個選項工作得很好:) :) –

+0

謝謝。第一個選項對我來說非常完美。 = - ) –

+0

第一個選項工作。其次沒有。應該編輯替代還是刪除它?感謝第一個。 –