我有一个ASP.NET MVC 4应用程序.这个应用程序有一个视图与页脚中的javascript块.我正在使用RAZOR视图引擎.我试图弄清楚如何将我的结果集转换为JSON数组.目前,我正在做以下事情:
<script type="text/javascript">
@for (int i=0; i<ViewBag.States.Count; i++) {
<text>
{ id: @Html.Raw(ViewBag.States[i]["ID"], name: \"" + ViewBag.States[i]["Name"] + "\"}")
</text>
if (i < (ViewBag.States.Count - 1)) {
<text>,</text>
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
这种方法在语法上似乎很草率.但是,我不知道怎么做.有谁知道我怎么能清理它?通过这种方法,我甚至无法弄清楚如何将"ID"值包装在引号中.
我知道这个问题已经在一年多前回答了,但我想添加我的解决方案,这是最干净的.
我基本上做的是这个(使用Newtonsofts Json.Net).我已经为HtmlHelper类创建了一个扩展方法,如下所示:
public static class HtmlHelperExtensions
{
public static HtmlString ToJson(this HtmlHelper @this, object value)
{
return new HtmlString(JsonConvert.SerializeObject(value));
}
public static HtmlString ToJson(this HtmlHelper @this, object value, Formatting formatting)
{
return new HtmlString(JsonConvert.SerializeObject(value, formatting));
}
}
Run Code Online (Sandbox Code Playgroud)
这让我做到了:
$scope.test = @(Html.ToJson(new []
{
new {id='1',name="Hello", desc="World"},
new {id='1',name="Hello", desc="World"},
new {id='1',name="Hello", desc="World"}
}));
Run Code Online (Sandbox Code Playgroud)
结果如下:
$scope.test = [{"id":"1","name":"Hello","desc":"World"},{"id":"1","name":"Hello","desc":"World"},{"id":"1","name":"Hello","desc":"World"}];
Run Code Online (Sandbox Code Playgroud)
基本上你的例子会变成:
@(Html.ToJson(ViewBag.States.Select(s=>new {id=s["ID"], name=s["Name"]})))
Run Code Online (Sandbox Code Playgroud)
要么
@(Html.ToJson(
from state in ViewBag.States
select new {id=state["ID"], name=state["Name"]}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9365 次 |
| 最近记录: |