我想将嵌套JSON从视图发送到模型,还有关于此问题的其他问题,但它们中没有一个在其对象中有变量键。
JSON对象:
"Login": {
"userId": "harshal.bulsara",
"userName": "Harshal Bulsara",
},
"ListOfEntities": {
"Patient": {
0: "Add",
1: "Edit"
},
"Practice": {
0: "Add",
1: "Edit",
2: "List"
},
}
我能够正确地使用密钥登录发送数据,但我无法发送ListOfEntities,这里重要的是这个JSON中的密钥每次都不一样(患者,实践)可能会有所不同< /强>
以下是型号代码:
public class authoritiesInfo
{
public Dictionary<string, Dictionary<int,string>> ListOfEntities { get; set; }
}
public class dashboardModel
{
public string userId { get; set; }
public string userName { get; set; }
public List<authoritiesInfo> auth { get; set; }
public void createSession()
{
processing //
}
}
这是控制器代码:
public class DashboardController : Controller
{
// GET: Dashboard
[HttpPost]
public ActionResult Index(dashboardModel dm)
{
dm.createSession();
return View();
}
}
视野中的代码:
var dt = [];
dt.push({
"userId": indexValue.value,
"userName": $("#cmbName option:selected").text(),
"auth": MY JSON mention above
});
$.ajax({
type: "POST",
url: '@Url.Action("Index", "Dashboard")',
data: dt[0],
crossDomain: true,
success: function (data) {
window.location.href = '@Url.Action("Page", "Dashboard")';
},
error: function (jqXHR, textStatus, error) {
alert("Error");
}
});
问题:如何将Nested JSON发送到控制器,JSON来自REST服务,如果还有其他需要进行任何修改的解决方案,我也可以控制,这也是受欢迎的< / p>
答案 0 :(得分:1)
要绑定到JSON,您必须设置contentType: 'application/json'
ajax选项并使用JSON.stringify()
对数据进行字符串化。
但是,JavaScriptSerializer
不会绑定嵌套的词典,因此您将更改模型以接受嵌套列表
public class authoritiesInfo
{
public string Name { get; set; }
public List<string> Values { get; set; }
}
public class dashboardModel
{
public string userId { get; set; }
public string userName { get; set; }
public List<authoritiesInfo> auth { get; set; }
}
然后数据
var data = {
userId: 'harshal.bulsara',
userName: 'Harshal Bulsara',
auth: [
{
Name: 'Patient',
Values: [ 'Add', 'Edit' ]
},
{
Name: 'Practice',
Values: ['Add', 'Edit', 'List']
}
]
};
和ajax
$.ajax({
url: '@Url.Action("Index", "Dashboard")',
contentType: 'application/json',
data: JSON.stringify({ dm: data }),
type: 'POST',
success: function (data) {
....
}
});
然后绑定到
[HttpPost]
public ActionResult Index(dashboardModel dm)
附注:如果您需要[{ 0: 'Add' },{ 1, 'Edit' }]
之类的对象集合而不是字符串[ 'Add', 'Edit' ]
的集合,那么请创建一个具有属性{{1}的附加类(例如Item
)然后将int ID
更改为string Name
并将数据更改为
public List<string> Values { get; set; }