将嵌套JSON从视图发送到模型

时间:2016-12-13 05:54:33

标签: c# json ajax asp.net-mvc rest

我想将嵌套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>

1 个答案:

答案 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; }