ASP.NET MVC 3 - 通过ajax无法正常传递额外参数以及模型到操作

时间:2011-12-28 01:49:37

标签: jquery ajax asp.net-mvc-3

为什么在这种情况下id在到达Action时会为空?

的Javascript

$("#ajax-submit").click(function () {
    var data = { setup: $("form").serialize(), id: "12345" };
    $.ajax({
        type: 'POST',
        url: "/MyController/Process",
        data: JSON.stringify(data),
        success: function () { alert("Successful"); },
        dataType: "json"
    });
});

动作

[HttpPost]
public ActionResult Process(SetupModel setup, string id)
{
    // id is null, setup is not!
}

如果我将javascript更改为:

$.ajax({
    type: 'POST',
    url: "/MyController/Process",
    data: { setup: $("form").serialize(), id: "12345" },
    success: function () { alert("Successful"); },
    dataType: "json"
});

然后id绑定,但setup没有绑定!

目标

我正在尝试开发一个逐步向导,其中整个模型在单个视图中呈现,并使用javascript显示/隐藏div以模拟前往下一页/上一页。

但是,我遇到的问题是,其中一个步骤需要建立一个列表(不提交整个模型)。为了实现这一点,我试图在那时提交数据(使用额外参数),更新控制器中的模型,然后使用更新的模型重新加载视图。

3 个答案:

答案 0 :(得分:3)

代码中的细微变化。

$.ajax({
    type: 'POST',
    url: "/MyController/Process",
    data: $("form").serialize() + '&id=12345',
    success: function() {
        alert("Successful");
    },
    dataType: "json"
});

这将解决问题

答案 1 :(得分:2)

试试这个

$("#ajax-submit").click(function () {

    id= "12345"; //

    var data = { setup: $("form").serialize()};
    $.ajax({
        type: 'POST',
        url: "/MyController/Process/"+id,
        data: JSON.stringify(data),
        success: function () { alert("Successful"); },
        dataType: "json"
    });
});

答案 2 :(得分:0)

您无法将其添加为查询字符串的一部分,因为默认路由期望“id”成为网址路径的一部分:

“{控制器} / {行动} /(编号)”

在您的$ .ajax调用中,网址应为“/ MyController / Process /”+ id