使用jquery ajax和MVC3发布表单的正确方法是什么?

时间:2011-08-08 13:06:06

标签: c# jquery asp.net asp.net-mvc-3

我已经看到了几种关于如何做到这一点的方法。除了一部分之外,我喜欢的自己的方法如下:

  1. 劫持表格提交事件
  2. 收集数据并构建json对象

    var objToSend = { Property : $('#propertyField').val(), Property2 : ... };
    

    这是我不喜欢的部分,因为收集这样的25个值是很乏味的

  3. 致电$.ajax({})并指定网址指向某处[HttpPost]已启用的操作

  4. 在成功中:ajax-query的一部分,收集返回的数据(我将其作为字符串返回)并在适当的地方写出来。我也在这里处理错误,检查第一个单词是否是“错误:”然后采取适当的措施。
  5. 除了收集阶段,我喜欢这种方法。我确信有一种更好的方法可以做到这一点,但是我从jquery WebForms背景中悄悄地投入ASP.NET,所以整个“拥抱网络”部分对我来说是完全陌生的。

4 个答案:

答案 0 :(得分:6)

您可以使用serialize()方法来避免逐个传递所有字段。它会使用application/x-www-form-urlencoded内容类型将整个表单数据发送到服务器,就好像它是标准表单提交一样:

$('#myform').submit(function() {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function(result) {
            // TODO: handle the success case
        }     
    });
    return false;
});

另一种可能性是jQuery form plugin

$('#myform').ajaxForm(function(result) { 
    // TODO: handle the success case
});

有些人发现使用Ajax.BeginForm帮助器呈现表单也很有用:

@using (Ajax.BeginForm(new AjaxOptions { OnSuccess = "success" }))
{
    ... some input fields
}

在ASP.NET MVC 3中,您需要包含jquery.unobtrusive-ajax.js脚本,该脚本不显眼地AJAX化Ajax助手发出的HTML 5 data-*属性。

答案 1 :(得分:3)

允许jQuery为你构建你的json。您可以序列化一个表单,该表单将创建一个供您提交的数据集。

$.post("myUrl", 
       $("form").serialize(), 
       function(callback) { ... } 
     );

答案 2 :(得分:1)

我就是这样做的!

如果您正在处理某个表单,您还可以选择使用MVC帮助程序为您创建邮政编码处理代码。

<% using (html.BeginForm()) {%>

    // html for the form


    <input type='submit' value='post' />

<% } %>

从WebForms到MVC的过渡对于人们来说可能是一个棘手的问题,你真的正在处理网络编程的原始方面,即http,html和javascript ......顺便说一下,我认为这是一件好事,因为我是不是WebForms的伪单进程事件模型的粉丝。

MVC万岁! :)

答案 3 :(得分:1)

我倾向于使用“jQuery表单插件”。它允许您轻松地将标准表单简洁地抽象为AJAX表单:

http://jquery.malsup.com/form/

它还允许您轻松捕获各种事件,故障条件,验证等,并可根据需要将表单转换为JSON请求或XML。处理文件上传。