2011-06-17 132 views
4

使用ASP.NET MVC3的不顯眼驗證功能如何在驗證運行之前運行一些JavaScript? Jquery的提交處理程序在驗證後運行,原因很明顯。我可以在提交按鈕上點擊一下,但這看起來不太優雅。有什麼建議麼?ASP.NET MVC 3不顯眼的驗證 - 在驗證事件之前?

編輯

看來我上面的說法是不正確。正如下面指出的那樣,提交處理程序在驗證之前運行。不幸的是,這並沒有解決我的問題。

我的修訂問題:

我需要處理表單提交之後,但jQuery驗證前一種形式的價值。如果我使用jQuery的提交處理程序提交後更改了值,那麼jQuery將驗證原始值而不是新值。

+3

我解決了這個問題。我有一個jQuery文檔就緒處理程序中的提交處理程序。一旦我刪除它,我可以根據需要在提交之前操作表單提交。 – Mark

+0

對於上面評論感到困惑的其他人:您需要將提交處理程序移出文檔就緒處理程序,並將其放在窗體的正下方。 – Stijn

回答

8

驗證後,提交處理程序不運行。它之前運行。試試看:

$('form').submit(function() { 
    alert('validation hasn\'t run yet at this point => see there is no red color over your form input fields yet'); 

    if ($(this).valid()) { 
     alert('the form is valid'); 
    } else { 
     alert('the form is not valid'); 
    } 
}); 

UPDATE:

修訂後的問題,我仍然無法重現該問題。這裏是我的模型:

public class MyModel 
{ 
    [Required] 
    public string Name { get; set; } 
} 

這是我的觀點:

@model MyModel 

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>   

@using (Html.BeginForm(null, null, FormMethod.Post, new { })) 
{ 
    @Html.EditorFor(x => x.Name) 
    @Html.ValidationMessageFor(x => x.Name) 
    <input type="submit" value="OK" /> 
} 

<script type="text/javascript"> 
    $('form').submit(function() { 
     $('#Name').val('some value'); 
    }); 
</script> 

現在,如果我離開名稱字段爲空並提交表單,新的值被正確地分配和表單成功提交服務器沒有任何錯誤。如果我刪除$('#Name').val('some value');行來分配一個新值並嘗試提交帶有空字段客戶端驗證觸發器的表單並且未提交該表單。

+1

驗證器(如果他配置它運行onsubmit)將在提交時執行。如果我沒有錯,那麼您粘貼的代碼將在執行之前或之後執行,具體取決於提交事件的附加命令。作爲一個方面說明,只要他使用jquery綁定事件(就像你的例子那樣),就能保證順序。 –

+0

感謝Darin的迴應。請看我修改的問題。 – Mark

+0

@Mark S.,我也更新了我的答案。 –

0

我不知道這是否是一個解決方案,但你可以看看到IClientValidatable接口http://msdn.microsoft.com/en-us/library/system.web.mvc.iclientvalidatable(v=vs.98).aspx

這裏的例子(很舊的),但應在當前版本的工作: ASP.NET MVC :將客戶端驗證添加到ASP.NET MVC 3 Preview中的ValidatePasswordLengthAttribute http://blogs.msdn.com/b/stuartleeks/archive/2010/07/28/asp-net-mvc-adding-client-side-validation-to-validatepasswordlengthattribute-in-asp-net-mvc-3-preview-1.aspx