2010-01-13 77 views
7

我有一个表单,当提交时,显示一个繁忙的动画并禁用提交按钮。ASP.NET MVC检查表单输入在提交时有效

任何人都知道如何查询微软的Sys.Mvc.FormValidation以查看表单是否通过了测试,以便我可以防止显示忙碌的动画,如果表单没有实际提交?有其他解决方法吗?

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

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

干杯,加文

+0

你为什么不接受的答案? – Sampath 2013-04-08 08:40:46

+1

@Sampath - 可能是因为在一段时间过去之前,stackoverflow不允许我接受我自己的答案,所以我可能忘了它。 – Gavin 2013-04-09 09:33:19

回答

9

我最终放弃了,相反在使用Microsoft ASP.NET MVC 2 RC和MicrosoftMvcJQueryValidation.js从“期货”项目库文件来自动线了一切对我来说是jQuery验证库堵塞。

本文介绍的过程: http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

因此,与有效的所有我需要做的是做出有效的()的调用jQuery验证...

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

.valid()似乎不起作用? – SteveCl 2011-03-26 18:07:25

+0

嗨SteveCI,不是我想用在上下文中的环境 - 查看原始问题;) – Gavin 2011-03-28 02:00:59

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); 
} 
+0

谢谢你,但我试图插入到微软自己的客户端MVC验证库,而不是我自己的CheckValidationErrorResponse函数。我使用的是使用数据注释时提供的自动验证。 我希望有一个很好的简单方法直接从Sys.Mvc.FormValidation客户端库查询验证结果,但还没有发现任何东西。 如果没有运气,可能需要考虑交换JQuery验证。碰到来自Microsoft的“期货”项目,而不是使用JQuery的验证库进行自动验证。 – Gavin 2010-01-14 20:32:16

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",...}