使用ASP.NET MVC3的不显眼的验证功能如何在验证运行之前运行一些JavaScript?出于显而易见的原因,Jquery的提交处理程序在验证后运行。我可以点击提交按钮,但这看起来并不优雅。有什么建议吗?
修改
我的上述陈述似乎不正确。如下所述,提交处理程序确实在验证之前运行。不幸的是,这并没有解决我的问题。
我修改过的问题:
我需要在表单提交之后但在jQuery验证之前操作表单值。如果我在使用jQuery的提交处理程序提交后更改了值,则jQuery将验证原始值而不是新值。
答案 0 :(得分: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');
}
});
更新:
在修改后的问题之后,我仍然无法重现这个问题。这是我的模特:
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 :(得分:0)
我不确定它是否是一个解决方案,但您可以查看 IClientValidatable 界面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