【问题标题】:ASP.NET MVC 3 Unobtrusive Validation - Before Validate Event?ASP.NET MVC 3 不显眼的验证 - 在验证事件之前?
【发布时间】:2011-09-17 12:42:12
【问题描述】:

使用 ASP.NET MVC3 的不显眼的验证功能如何在验证运行之前运行一些 JavaScript?由于显而易见的原因,Jquery 的提交处理程序在验证后运行。我可以点击提交按钮,但这似乎不太优雅。有什么建议吗?

编辑

看来我上面的说法是不正确的。正如下面所指出的,提交处理程序确实在验证之前运行。不幸的是,这并不能解决我的问题。

我修改后的问题:

我需要在表单提交之后但在 jQuery 验证之前操作表单值。如果我在提交后使用 jQuery 的提交处理程序更改了值,那么 jQuery 会验证原始值而不是新值。

【问题讨论】:

  • 我解决了这个问题。我在 jQuery 文档就绪处理程序中有提交处理程序。一旦我删除它,我就可以根据需要在提交之前操纵表单提交。
  • 对于其他对上述评论感到困惑的人:您需要将提交处理程序移出文档就绪处理程序并将其放在表单正下方。

标签: jquery asp.net asp.net-mvc-3


【解决方案1】:

提交处理程序在验证后不运行。它之前运行。试试看:

$('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'); 行并尝试提交带有空字段的表单客户端验证触发器并且表单未提交。

【讨论】:

  • 验证器(如果他将其配置为在提交时运行)将在提交时执行。如果我没记错的话,您粘贴的代码将在之前或之后执行,具体取决于提交事件的附加顺序。作为旁注,只要他使用 jquery 绑定事件(如您的示例那样),就可以保证顺序。
  • 感谢达林的回复。请参阅我修改后的问题。
【解决方案2】:

我不确定这是否是一个解决方案,但您可以查看 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

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2011-12-22
    • 2011-06-28
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多