ASP.NET MVC:如果客户端验证通过,则禁用"提交"按钮

Ian*_*ink 7 asp.net-mvc jquery asp.net-mvc-4

我有一个启用了客户端验证的简单MVC4表单:

 @{ Html.EnableClientValidation(); }
 @{ Html.EnableUnobtrusiveJavaScript(); }
 @using (Html.BeginForm("Search", "Search", FormMethod.Post, new { id = "frmMain" }))
    {
      @Html.AntiForgeryToken() .....
      <input type="submit" value="Search" id="btnSubmit" />
Run Code Online (Sandbox Code Playgroud)

当用户单击客户端上的提交和所有验证通过时,我希望按照下面的jQuery禁用提交按钮.我怎么知道验证是否已通过我的jQuery脚本中的客户端?

<script type="text/javascript">

$(document).ready(function () {
    $('input[type=submit]').click(function (e) {
        $(this).attr('disabled', true);
        $(this).attr('value', 'Working');
        $('#frmMain').submit();
    });
});
Run Code Online (Sandbox Code Playgroud)

Fel*_*sin 12

您可以将此代码挂钩到表单验证器中.只需确保它在jquery.validator.unobtrusive之后执行.

<script>
    $("#you-form-id").data("validator").settings.submitHandler = function(form) {
         $("#submit-button").attr("disabled",true).val("Working");
         form.submit();
    };
</script>
Run Code Online (Sandbox Code Playgroud)

  • 我认为两种方式都有效,当你使用jQuery Validator插件时,没有正确的答案.使用submitHandler(尽管代码更加丑陋),您只需处理一次验证,但我并不完全确定调用valid()是否会重新验证所有字段,这些字段可能会产生一些边际性能影响. (2认同)

Dav*_*vid 10

从控制器操作返回partail时我遇到了一些问题.相反,我挂钩到提交函数并检查表单是否有效如下:

        $('form').submit(function () {
            if ($(this).valid()) {
                $('#order-form-submit-button').attr("disabled", true).val("wait...");
            }
        });
Run Code Online (Sandbox Code Playgroud)