[英]ASP.NET MVC 3 Unobtrusive Validation - Before Validate Event?
使用ASP.NET MVC3的不顯眼的驗證功能如何在驗證運行之前運行一些JavaScript? 出於顯而易見的原因,Jquery的提交處理程序在驗證后運行。 我可以點擊提交按鈕,但這看起來並不優雅。 有什么建議么?
編輯
看來我的上述陳述是不正確的。 如下所述,提交處理程序確實在驗證之前運行。 不幸的是,這並沒有解決我的問題。
我修改過的問題:
我需要在表單提交之后但在jQuery驗證之前操作表單值。 如果我在使用jQuery的提交處理程序提交后更改值,則jQuery驗證原始值而不是新值。
驗證后,提交處理程序不會運行。 它之前運行。 試試吧:
$('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');
}
});
更新:
在修改后的問題之后,我仍然無法重現這個問題。 這是我的模特:
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');
分配新值並嘗試使用空字段客戶端驗證觸發器提交表單的行,並且不提交表單。
我不確定它是否是一個解決方案,但你可以查看IClientValidatable Interface http://msdn.microsoft.com/en-us/library/system.web.mvc.iclientvalidatable(v=vs.98)的.aspx
這是一個例子(相當古老)但應該在當前版本中工作:ASP.NET MVC:在ASP.NET MVC 3預覽中向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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.