【问题标题】:ASP.NET MVC check form input is valid on submitASP.NET MVC 检查表单输入在提交时是否有效
【发布时间】:2010-01-13 21:54:45
【问题描述】:

我有一个表单,在提交时会显示一个忙碌的动画并禁用提交按钮。

任何人都知道如何查询 Microsoft 的 Sys.Mvc.FormValidation 以查看表单是否通过了测试,这样我就可以防止显示表单实际上尚未提交的繁忙动画?还有其他的解决方法吗?

目前我的客户端 JavaScript 是这样的:

$('form').submit(function() {
    $('input[type=submit]', this).attr('disabled', 'disabled');
    ShowBusy();
});

干杯, 加文

【问题讨论】:

  • 你为什么不接受答案?
  • @Sampath - 可能是因为 stackoverflow 不允许我接受我自己的答案,直到过了一段时间,所以我可能忘记了。

标签: jquery asp.net-mvc validation


【解决方案1】:

我最终放弃并插入了 JQuery 验证库,而不是使用“futures”项目中的 Microsoft ASP.NET MVC 2 RC 和 MicrosoftMvcJQueryValidation.js 库文件来自动为我连接所有内容。

这篇文章解释了这个过程: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

所以在 JQuery 验证生效后,我需要做的就是调用 valid()...

$('form').submit(function() {
    if ($('form').valid()) {
        $('input[type=submit]', this).attr('disabled', 'disabled');
        ShowBusy();
    }
});

【讨论】:

  • 您好 SteveCI,不适用于我想在其中使用验证的上下文 - 请参阅原始问题 ;)
【解决方案2】:

使用http://jquery.malsup.com/form/。这是我的做法 - 此方法处理错误(和其他条件)以停止动画。它还可以 ajaxify 表单或立即提交(取决于提交标志),并做一些其他事情。

function GenericAjaxForm(form, success, submit, beforeSubmit) {
   var form = $(form);
   var options = {
      beforeSubmit: function(data, frm, options) {
         form.disable(true);
         form.find("input:submit:last").after(
            "<span class='ajaxwait'><img src='../Content/images/smallwait.gif' /></span>");
         if (beforeSubmit)
            return beforeSubmit(data, frm, options);
      },
      error: function(xhr, status, error) {
         $(".validation-summary-errors").html(getAjaxErrorMessage(status, xhr));
         form.disable(false);
         form.find(".ajaxwait").remove();
      },
      success: function(data) {
         form.disable(false);
         form.find(".ajaxwait").remove();
         $(".validation-summary-errors").html('');
         if (CheckValidationErrorResponse(data, form))
            return;
         success(data);
      }
   };
   if (submit)
      form.ajaxSubmit(options);
   else
      form.ajaxForm(options);
}

【讨论】:

  • 谢谢你,但是我试图插入微软自己的客户端 MVC 验证库,而不是我自己的 CheckValidationErrorResponse 函数。我正在使用使用数据注释时提供的自动验证。我希望有一种很好的简单方法可以直接从 Sys.Mvc.FormValidation 客户端库中查询验证结果,但还没有找到任何东西。如果运气不好,可能不得不考虑切换到 JQuery 验证。遇到了一个来自 Microsoft 的“futures”项目,它对 JQuery 的验证库进行自动验证。
【解决方案3】:

这仅适用于 MVC 1.0,在 MVC 2.0 中微软切换到使用 jQuery,这不再有效。

onformSubmit: function (e) {
    if (!Sys.Mvc.FormContext && Sys.Mvc.FormContext.getValidationForForm(this).validate('submit').length) {
    return;
    showBusy();
}

如果您使用 Ajax.BeginForm 助手,您可以执行类似的操作

Ajax.BeginForm("action","controller", AjaxOptions{ OnBegin="onformSubmit",...}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-08
    • 2019-09-10
    • 2011-08-18
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多