不幸的是,Dictionary在MVC中存在模型绑定问题。在这里阅读全文。而是创建一个自定义模型联编程序,以将Dictionary作为控制器操作的参数。
为了满足您的要求,这是可行的解决方案-
首先按照以下方式创建ViewModels。PersonModel可以具有RoleModels的列表。
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;}}然后执行一个索引操作,该操作将提供基本的索引视图-
public ActionResult Index(){ return 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"); }}因此,现在发布时,您可以在action的模型参数中获取所有发布的数据。
更新:
对于asp.net核心,要获取JSON数据作为操作参数,应 [FromBody]
在控制器操作中的参数名称之前添加属性。注意:如果您使用的是ASP.NET Core
2.1,则还可以使用该
[ApiController]属性来自动推断复杂操作方法参数的[FromBody]绑定源。(文档)



