ASP.NET MVC 3 - 通过ajax向操作中传递额外参数与模型一起,无法工作

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个回答

3

您的代码需要进行小幅更改。

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

这将解决问题。

1
谢谢,这个方法解决了问题。你有什么想法为什么我的代码之前不能运行?在我看来它看起来没问题。 - James

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"
    });
});

控制器中的ID仍然为空。请参见已接受的答案以获取解决方案。 - James

0

你不能将它作为查询字符串的一部分添加,因为默认路由期望 "id" 是 URL 路径的一部分:

"{controller}/{action}/{id}"

在你的 $.ajax 调用中,URL 应该是 "/MyController/Process/" + id


即使我将“id”重命名为“userId”,它仍然无法绑定。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接