gpt4 book ai didi

c# - 将包含数组的 JSON 数据发布到 Controller 操作

转载 作者:行者123 更新时间:2023-12-01 08:16:58 25 4
gpt4 key购买 nike

在 ASP.NET MVC3 应用程序中,我尝试使用 jQuery 对操作进行异步发布。

以下 JSON 对象作为数据传递...

{
categoryId: "21"
content: "asdf"
reference: "asdf"
tags: [
{id: 1, name: "asdf", status: 1},
{id: 2, name: "asdf", status: 1},
{id: 3, name: "asdf", status: 1}
]
}

我必须接收请求的方法签名是

[HttpPost]
public ActionResult Create(String reference, Int32? categoryId, String content, IEnumerable<TagDTO> tags)

TagDTO 被定义为:

public class TagDTO
{
public String name { get; set; }
public Int32 id { get; set; }
public Int32 status { get; set; }
}

我应该提到,在将对象数组引入 JSON 对象和操作方法的签名之前,这是完美的。并且 Post 仍然成功到达操作,只是 IEnumerable 中的数据没有正确通过。它会给我 IEnumerable 中正确的对象数量,但它们都被初始化为默认值。 (id=0,名称=null,状态=0)

我不确定我在这里做错了什么。我希望这是有道理的。我希望有人能够向我展示以这种方式将数据传递到 MVC 操作的正确方法。

谢谢

<小时/>

这是我用来执行 ajax 调用的 javascript 函数...

function saveResource() {
var tagAssignments = [];
for (var x = 0; x < $('.tag-assignment').length; x++) {
var tag = $($('.tag-assignment')[x]);
tagAssignments.push({
name: tag.find('.tag-name').html().toString(),
id: parseInt(tag.find('.tag-id').html()),
status: parseInt(tag.find('.tag-status').html())
});
}

$.ajax({
url: '/Resources/Create',
dataType: 'json',
type: 'POST',
success: function (data) {
if (data.status == 'Success') {
forwardToDefaultPage();
} else {
alert(data.status);
}
},
data: {
reference: $('#txt-resource-reference').val(),
categoryId: $('#ddl-category').val(),
content: $('#txt-resource-content').val(),
tags: tagAssignments
}
});
}

最佳答案

我建议您使用 View 模型并发送 JSON 请求。

所以 View 模型:

public class CreateViewModel
{
public string Reference { get; set; }
public int? CategoryId { get; set; }
public string Content { get; set; }
public IEnumerable<TagDTO> Tags { get; set; }
}

行动:

[HttpPost]
public ActionResult Create(CreateViewModel model)
{
...
}

AJAX 请求:

// TODO: build this object dynamically as you are currently doing
// but always start with hardcoded values like this to test first
var data = {
categoryId: '21',
content: 'asdf',
reference: 'asdf',
tags: [
{ id: 1, name: 'asdf', status: 1 },
{ id: 2, name: 'asdf', status: 1 },
{ id: 3, name: 'asdf', status: 1 }
]
};

$.ajax({
url: '@Url.Action("create", "resources")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ model: data }),
success: function(result) {
...
}
});

此处使用的 JSON.stringify 方法内置于现代浏览器中。如果您需要支持旧版浏览器,您可以添加 json2.js将脚本添加到您的页面。

关于c# - 将包含数组的 JSON 数据发布到 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9969832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com