如何在 mvc 操作方法中传递复杂的 JSON object?

How to pass complex JSON object in mvc action method?

我有一种情况是从 ajax 调用中获取数据。我想调用一个动作方法并将数据作为参数传递。传递给操作方法的数据应映射到参数列表中的 object 属性。 这是我的 class,称为 FullQuestion。

public class FullQuestion : Question
{
    public string Title { get; set; }
    public string Content { get; set; }
    public List<Tag> Tags { get; set; }
}

这是我的Ajax调用方法

var finalTagResultText = {Title: "title", Content: "content",Tag: { tagName: "tname", tagDescription: "tdesc"},Tag: { tagName: "tname1", tagDescription: "tdesc1"}};
$.ajax({
    url: '@Url.Action("AskQuestion", "Dashboard")',
    type: "POST",
    data: JSON.stringify(finalTagResultText),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(result) {
        window.location.href = "@Url.Action("Questions", "Dashboard")";
    }
});

这是我的操作方法。

[HttpPost]
[ActionName("AskQuestion")]
public void AskQuestion_Post(FullQuestion question)
{
}

我想让 JSON object 作为 FullQuestion object 通过。我使用 json2 库来使用 stingify 方法。 我得到了标题和内容文本,但没有标签 object。 知道我该怎么做吗?提前致谢。

您的集合 属性 被命名为 Tags(而不是 Tag)并且由于它是一个集合,您需要传递一个 Tag 对象的数组,例如

var finalTagResultText = { .... , Tags: [{ tagName: "tname", tagDescription: "tdesc"}, { tagName: "tname1", tagDescription: "tdesc1"}]}`

旁注:您的 ajax 成功回调正在重定向到另一个页面,在这种情况下,请勿使用 ajax 提交您的数据。 ajax 的重点是保持在同一页面上。您最好只执行标准提交并在 POST 方法中使用 RedirectToAction()

您使用的JSON格式有误,使用正确的格式如下:

{"Title": "title", "Content": "content","Tag":[{ "tagName": "tname", "tagDescription": "tdesc"},{ "tagName": "tname1", "tagDescription": "tdesc1"}]}

为了验证您的 JSON 字符串,您可以使用下面的 link https://jsonformatter.curiousconcept.com/