通过jquery将集合传递给MVC控制器

时间:2013-04-17 12:30:28

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

我正在使用ASP.NET MVC3和Jquery。我正在尝试使用类似的东西将表单元素传递回控制器(请注意,为简单起见,我删除了成功和错误代码):

var formElements = $("#myForm").serialize();
        $.ajax({
            type: "POST",
            url: ScriptResolveUrl("~/Report/SubmitChanges"),
            data: {collection: formElements},
            success: 
            error:
            dataType: "json"
        });

我的问题是我的控制器方法中的参数应该是什么样子: 这是我的控制器方法:

public ActionResult SubmitChanges(WHAT GOES HERE?)
{
}

所以我真正想要的是进入控制器方法的参数类型应该是什么?我希望能够检索控制器中表单元素的值。

4 个答案:

答案 0 :(得分:1)

所以这就是我所做的。我的表单上有大约20-30个元素,所以我真的不想将每个元素转换为参数或将它们全部列在集合中。

在jquery中,我做了以下事情:

 var formElements = $("#myForm").serialize();

        $.ajax({
            type: "POST",
            url: ScriptResolveUrl("~/Report/SubmitChanges"),
            data: { parms: formElements },
            success:
            error: 
            dataType: "json"
        });

然后它作为字符串进入我的控制器:

public ActionResult SubmitChanges(string parms)

然后我找到了一个解析该字符串的函数(似乎正在工作)

NameValueCollection qscoll = HttpUtility.ParseQueryString(parms);

这似乎无法列出所有表单元素。

答案 1 :(得分:0)

假设您的表单元素都与您的模型相对应(假设它是MyModel),那么它应该只是:

public ActionResult SubmitChanges(MyModel model)
{
}

MVC默认模型绑定将完成其余的工作:)。

请确保您在jQuery ajax方法中更改了data定义,但您已经将其序列化了。只是做:

data: formElements,

我假设你的jQuery中有以下ajax方法是一个复制和粘贴错误?

success: 
error:

如果不是,请确保将其删除,或将其更改为:

success: function (result) {
    //do something
},
error: function () {
    //do something on error
}

答案 2 :(得分:0)

  

问题是他们没有与我的表格相对应的模型   元件。

然后你就可以拥有:

public ActionResult SubmitChanges(int id, string name)
{
}

然后传递个别项目:

var o = {
    id = $("#id_elem_id").val(),
    name = $("#name_elem_id").val()
}
$.ajax({
    type: "POST",
    url: ScriptResolveUrl("~/Report/SubmitChanges"),
    data: JSON.stringify(o),
    success: 
    error:
    dataType: "json"
});

其中id_elem_idname_elem_id是您的html元素的ID。并添加您需要的任何其他参数,只需按照步骤进行操作。

答案 3 :(得分:0)

你快到了。只需摆脱data参数周围的括号:

var formElements = $('#myForm').serialize();
$.ajax({
    type: 'POST',
    url: ScriptResolveUrl("~/Report/SubmitChanges"),
    data: formElements,
    success: function(result) {
        // handle the success of the AJAX request
    },
    error: function() {
        // an error occurred
    }
});