MVC和JQuery:检索表单数据的最佳实践

时间:2009-10-07 05:56:59

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

我有一些JQuery使用Ajax将信息发送回我的控制器进行处理

我这样做:

//Define my controls
<%=Html.TextBox("PName", Model.PName, new { id = "pName" })%> ... 
....
....

//Get the values from my controls
var param1= $("#pName").val();
....
....

    //Define the return URL. Is this how to send info back?
    var url = '<%= Url.Content("~/Port/SaveRowAjax") %>/?ID=' + id
                + "&param1=" + param1
                + "&param2=" + param2
                + "&param3=" + param3
                + "&param4=" + param4
                + "&param5=" + param5;

    $.ajax({
        url: url,
        success: function(html) {
            alert("Success!");
        },
    });

   //My c# code, that processes the request
    public void SaveRowAjax(string param1 ....)
    {
        ...
    }

这是使用MVC进行此操作的最佳方式吗? 当我构建回发到服务器的URL

时,似乎有点乱

4 个答案:

答案 0 :(得分:4)

尝试使用SerializeArray提交表单项。它会将所有值都装入JSON对象。

var link = "/Port/SaveRowAjax";
var formData = $(":input").serializeArray();
$.post(link,formData);

答案 1 :(得分:2)

您可以尝试在jQuery中使用此类语法

$.post(link, {param1: param1, param2: param2 });

答案 2 :(得分:1)

对我有用的方法是:

jQuery.ajax({
        url: '@Url.Action("SaveRowAjax", "Port")',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({ param1: param1, param2: param2, param3: param3 }),
        success: function (result) { }
    });

答案 3 :(得分:0)

有几种方法可以做到这一点。我更喜欢这里概述的方法:

http://weblogs.asp.net/mikebosch/archive/2008/02/15/asp-net-mvc-submitting-ajax-form-with-jquery.aspx

是的,它基于较旧版本的MVC,但该技术真正的优点是使用jQuery(没有改变)。

该技术的一个限制是它不能用于文件上传,但是,有一个jQuery插件用于执行支持文件上传的ajax表单帖子(我想通过隐藏的iframe)。

编辑: 我认为使用此技术的最佳理由是,如果用户禁用了javascript,表单仍然有效。