ASP.NET MVC检查表单输入在提交时有效

时间:2010-01-13 21:54:45

标签: jquery asp.net-mvc validation

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

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

目前我的客户端JavaScript看起来像这样:

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

干杯, 加文

3 个答案:

答案 0 :(得分:9)

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

本文解释了该过程: 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();
    }
});

答案 1 :(得分:0)

使用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);
}

答案 2 :(得分:0)

这仅适用于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",...}