【问题标题】:Passing values from View to Controller doesn't work将值从视图传递到控制器不起作用
【发布时间】:2016-09-02 17:57:45
【问题描述】:

我正在尝试将变量从我的视图发送到控制器,以便我可以在不同的视图中使用它。我已经阅读了几个如何做到这一点的示例,但是我无法让它发挥作用。

这是我的模型:

public class GameResultsViewModel
{
    public int p { get; set; }
}

我的控制器操作:

[HttpPost]
public IActionResult EndScreen(GameResultsViewModel results)
{
    return null;
}

Javascript 函数:

function submitResults() {
    var model = new Object();
    model.p = 3;
    jQuery.ajax({
        type: "POST",
        url: "@Url.Action("EndScreen")",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ results: model }),
        success: function() {
            alert("yay");           
        },
        failure: function() {
            alert("nope");
        }
    });
}

我从一个简单的输入调用这个函数:

<input type="button" value="Click" onclick="submitResults()" />

当我单击按钮时,它转到操作,但变量始终为 0。我错过了什么吗?

【问题讨论】:

  • 您只需要data: { p: 3 }, 并删除contentType: 选项。

标签: asp.net json ajax asp.net-mvc model-binding


【解决方案1】:

从发布的数据中删除results

{ results: model }

MVC 绑定到模型的属性名称。您可以在此处阅读有关binding 的更多信息。

function submitResults() {
    var model = { p: 3 };
    jQuery.ajax({
        type: "POST",
        url: "@Url.Action("EndScreen")",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(model),
        success: function() {
            alert("yay");           
        }
    });
}

您是否将操作更改为

[HttpPost]
public IActionResult EndScreen(GameResultsViewModel results, string foo)

那么你将包括results

var model = { p: 3 };

data: JSON.stringify({ results: model, foo: "bar" })

【讨论】:

  • 我把它改成了你的版本,但是控制器中的p值仍然是0。这似乎是JSON.stringify(model)行的问题。也许它在发送后不会将 json 转换为我的视图模型。如果我像这样传递 2 个变量: data: { results: JSON.stringify(model), foo: "foo" } 那么 foo 变量可以正常发送,但 results 变量不是。
  • 将您最近的尝试附加到您的问题中。
  • 尝试 - 数据:JSON.stringify({ p : 3, foo: "bar" })
  • 你能把 {"p": 3,foo:"bar"} 改成这样吗?
猜你喜欢
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多