【问题标题】:Create a List-type view dynamically from a Json object in MVC3从 MVC3 中的 Json 对象动态创建 List 类型的视图
【发布时间】:2011-11-16 15:22:55
【问题描述】:

我有一个访问 WCF 服务的控制器,该服务返回一个 Json 对象(集合)。所有行的类型相同,但在不同的调用中,行的严格性不同(返回对象来自用户构建的 sql 查询,使用 executeReader 执行并序列化为 Json 所以我不知道前面的行结构。

我需要一种简单的方法来将此 Json 字符串传递给将为其动态生成类型列表视图的东西。格式等无关紧要,只需将其轻松输出为表格即可。

有谁知道我该怎么做?

另一种选择可能是为匿名对象的 IEnumerable 动态生成视图(因为使用 this 我可以将 json 转换为匿名列表)


编辑

我发现了一些我需要的东西,除了它显示有关传递对象的元数据。

它是preetyPrint.js,我将它集成到我的页面中,如下所示: 在我的控制器中,我将结果 json 对象设置为 ViewBag.Result,在视图中我使用了以下代码:

    <script src="@Url.Content("~/Scripts/prettyprint.js")" type="text/javascript">    </script>
    <div id="resultGrid"></div>
    <script>
    var resultObject = @Html.Raw(ViewBag.Result);            
    var ppTable = prettyPrint(resultObject);
    document.getElementById('resultGrid').appendChild(ppTable);         
    </script>

有谁知道这样的脚本实际上“转储”了数据而不是元数据? 谢谢。

【问题讨论】:

    标签: json asp.net-mvc-3 view


    【解决方案1】:

    如果您知道行的属性,您应该创建一个反序列化的类。然后使用JavaScriptSerializer 类反序列化为您创建的新类的列表。然后你可以看看WebGrid类来输出HTML,或者只是手动迭代你视图中的属性元数据。

    创建自定义类将使您能够使用元数据来控制输出的格式或其他显示属性。

    如果您无法创建自定义类,您始终可以使用 Json.NET 或 JavaScriptSerializer 反序列化为字典对象列表或 ExpandoObject / Dynamic 或其他东西。然后你将不得不手动编写一些东西来迭代我认为的键。 MVC 中的ModelMetadataProvider 可能能够处理这些,从而允许您只在视图代码中迭代属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-20
      • 2016-10-02
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 2015-03-22
      相关资源
      最近更新 更多