如何在cshtml文件中使用razor制作带有层次结构的动态JSON OBJECT?

时间:2013-12-06 19:55:58

标签: c# json razor

我正在尝试使用razor制作动态JSON OBJECT,但我不知道如何在没有','的情况下创建最后一个子项。我正在创建最后一个写作对象,但它给了我任何问题。

我从Oracle数据库获取数据,并在数据列上定义了所有父级和子级别。

模拟我的代码的简短代码:

@{ 
var itemLevel = Model.LstUnidadesGerenciais.ElementAt(0).Level;
}

var treeData = [

    @foreach (var item in Model.LstUnidadesGerenciais)
    {
        var itemUG = item.Cod_UG; if (itemLevel == item.Level)
        { 
    <text>
        {
            title: "@item.Nome - @item.Txt_Sigla_UG", key: "@item.Level", icon: false, ug: "@item.Cod_UG", sigla: "@item.Txt_Sigla_UG", expand: true,
            children: [

                @foreach (var itemFilho in Model.LstUnidadesGerenciais)
                {
                    var itemUGFilho = itemFilho.Cod_UG; if (itemFilho.Cod_UG_Superior == itemUG && itemFilho.Level == item.Level + 1)
                    { 
                <text>
                {
                    title: "@itemFilho.Nome - @itemFilho.Txt_Sigla_UG", key: "@itemFilho.Level", icon: false, ug: "@itemFilho.Cod_UG", sigla: "@itemFilho.Txt_Sigla_UG", expand: false
                },
                </text>
                    }
                }

                {
                    title: "Nome", key: "2", icon: false, ug: "COD", sigla: "COD", expand: false
                }
            ]
        },

     </text>

        }
    }

     {
         title: "Nome", key: "1", icon: false, ug: "COD", sigla: "COD", expand: false
     }
];

我不想在'foreach'结束时写这个来解决','问题:

     {
         title: "Nome", key: "1", icon: false, ug: "COD", sigla: "COD", expand: false
     }

1 个答案:

答案 0 :(得分:0)

如果您想直接在响应中执行此操作,以下可能是一种方法:

 JavaScriptSerializer serializer = new JavaScriptSerializer();
 string json = serializer.Serialize((object)yourDictionary);

此选项可归功于(Outputting Json with the Razor view engine)。或者如果你可以使用AJAX,在MVC4中(至少)你可以写下面的

    // GET: /Account/
    [HttpGet]
    public ActionResult Index()
    {
       object myObject = LoadFromDatabase();
       return Json(myObject);
    }

在此“LoadFromDatabase”中表示从数据库加载所需的任何内容。 Json调用为您序列化标准JSON格式的对象(有关详细信息,请参阅msdn)。

此代码进入控制器,可以使用AJAX从您的javascript调用。这可能意味着更多往返服务器,但它可以使页面加载时间更快,因为您的页面不必等待数据库调用和json创建,以便返回视图。