将Microsoft MVC ajax和验证助手与本机jquery ajax混合使用
导言 这篇文章是关于将MicrosoftMVC助手与本地jQueryAjax混合使用的。我一路上遇到的主要问题是:将Microsoft MVC ajax和验证助手与本机jquery ajax混合使用,jquery,ajax,asp.net-mvc,validation,mixing,Jquery,Ajax,Asp.net Mvc,Validation,Mixing,导言 这篇文章是关于将MicrosoftMVC助手与本地jQueryAjax混合使用的。我一路上遇到的主要问题是: 双重投稿 @Html.validationMessage用于不输出 属性 要求 我需要验证并发布表单(id=“我的表单”) 表单绑定到一个用验证属性修饰的模型,因此我想使用@Html.ValidationMessageFor等帮助器方法来利用不引人注目的优势 我需要客户端和服务器端验证(服务器端我对数据库进行唯一名称检查) 在提交表单以添加其他表单数据时,我需要进行一些客户端处理
属性
@using (Ajax.BeginForm( ...
所有的工作都像广告上说的那样。这给了我一个不引人注目的验证,但它并没有满足我定制的表单数据发布要求
所以我想我应该覆盖提交过程
步骤2
在document ready中,我连接了新的事件处理程序:
$(document).ready(function ()
{
// Rebind validators
$.validator.unobtrusive.parse('#my-form');
// Hook up submit event
$("#my-form").submit(SubmitForm);
});
在我的提交功能中,我可以自己处理表单数据:
function SubmitForm(e)
{
// Suppress normal event behaviour
e.preventDefault();
// Validate the form
var valid = $("#my-form").validate();
if (valid.errorList.length > 0)
return;
// Collect up form data manually
var formData = ...(code removed for clarity)
// Display animated gif
$("#ajax-loader").css("display", "inline")
// Post Form
$.post(
'@Url.Action("MyAction", "MyController")', // url
formData, // data
SuccessFunction // success
)
.error(ErrorFunction); // error
}
好了,现在场景设置好了
问题
一个问题是我混合了两种ajax。这导致了双重职位。使用fiddler,我可以看到帖子发生了两次。(一次用于micosoft表单声明,一次用于jquery post)
这是因为两个处理程序已连接。通过谷歌搜索,我发现有些人正在使用jquery删除一个处理程序,但看起来有点混乱
步骤3
因此,我将@using(Ajax.BeginForm(…语法)更改为一个简单的表单标记:
<form id = "my-form">
...
</form>
我使用Html.BeginForm纯粹是为了让我的@Html.ValidationMessageFor完成它们的工作。“MyAction”和“MyController”参数都是多余的,因为我的自定义事件处理程序接管了表单提交过程
已解决
现在一切似乎都好了
Phil通常在这种情况下,我喜欢中建议的方法。现在,首先它将在客户端为您生成验证,可以使用JQuery进行检查,并且您还可以在服务器端创建/生成强制验证。这意味着您在类中定义规则,如示例所示,然后使用该类检查验证。因此将在服务器端检查。我通常使用ajax只是不编写html,大多数时候我会忘记右括号和一些东西,所以助手很好,但我不支持ajax.Beginform。简单的Beginform很好 我通常使用拇指法则,视图必须有简单清晰的HTML或帮助程序,我尽量少嵌套div和其他东西 请让我知道是否有任何进一步的细节需要在这个主题。有几个好的文章,你可以在网上找到这个。如果你想我可以分享
@using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { id = "my-form" }))
{....