gpt4 book ai didi

asp.net - 如何接收 JSON 作为 MVC 5 操作方法参数

转载 作者:IT老高 更新时间:2023-10-28 12:43:56 25 4
gpt4 key购买 nike

我整个下午都在尝试在网络中爬行,试图在 Action Controller 中接收 JSON 对象。

什么是正确或更简单的方法?

我尝试了以下方法:1:

//Post/ Roles/AddUser
[HttpPost]
public ActionResult AddUser(String model)
{
if(model != null)
{
return Json("Success");
}else
{
return Json("An Error Has occoured");
}

}

这给了我输入的空值。

2:

//Post/ Roles/AddUser
[HttpPost]
public ActionResult AddUser(IDictionary<string, object> model)
{
if(model != null)
{
return Json("Success");
}else
{
return Json("An Error Has occoured");
}

}

在试图发布到它的 jquery 端给我一个 500 错误? (意味着它没有正确绑定(bind))。

这是我的 jQuery 代码:

<script>
function submitForm() {

var usersRoles = new Array;
jQuery("#dualSelectRoles2 option").each(function () {
usersRoles.push(jQuery(this).val());
});
console.log(usersRoles);

jQuery.ajax({
type: "POST",
url: "@Url.Action("AddUser")",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(usersRoles),
success: function (data) { alert(data); },
failure: function (errMsg) {
alert(errMsg);
}
});
}

我只想在我的 mvc 操作中接收我的 JSON 对象?

最佳答案

不幸的是,Dictionary 在 MVC 中的模型绑定(bind)存在问题。 Read the full story here .相反,创建一个自定义模型绑定(bind)器以获取 Dictionary 作为 Controller 操作的参数。

为了解决您的要求,这是可行的解决方案 -

首先按以下方式创建您的 ViewModel。 PersonModel 可以有 RoleModel 列表。

public class PersonModel
{
public List<RoleModel> Roles { get; set; }
public string Name { get; set; }
}

public class RoleModel
{
public string RoleName { get; set;}
public string Description { get; set;}
}

然后有一个索引操作,它将为基本索引 View 提供服务 -

public ActionResult Index()
{
return View();
}

索引 View 将具有以下 JQuery AJAX POST 操作 -

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
$('#click1').click(function (e) {

var jsonObject = {
"Name" : "Rami",
"Roles": [{ "RoleName": "Admin", "Description" : "Admin Role"}, { "RoleName": "User", "Description" : "User Role"}]
};

$.ajax({
url: "@Url.Action("AddUser")",
type: "POST",
data: JSON.stringify(jsonObject),
contentType: "application/json; charset=utf-8",
dataType: "json",
error: function (response) {
alert(response.responseText);
},
success: function (response) {
alert(response);
}
});

});
});
</script>

<input type="button" value="click1" id="click1" />

将操作帖子索引到 AddUser 操作 -

[HttpPost]
public ActionResult AddUser(PersonModel model)
{
if (model != null)
{
return Json("Success");
}
else
{
return Json("An Error Has occoured");
}
}

所以现在当post发生时,你可以在action的model参数中获取所有的posted数据。

更新:

对于 asp.net 核心,要获取 JSON 数据作为您的操作参数,您应该在 Controller 操作中的参数名称之前添加 [FromBody] 属性。注意:如果您使用的是 ASP.NET Core 2.1,您还可以使用 [ApiController] 属性为您的复杂操作方法参数自动推断 [FromBody] 绑定(bind)源。 (Doc)

enter image description here

关于asp.net - 如何接收 JSON 作为 MVC 5 操作方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21578814/

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