在视图中,
@{
Layout = "~/Views/Shared/site.cshtml";
ViewBag.Title = "Organizations";
var organizations = "";
foreach (var org in Model)
{
organizations += "'" + org.Name + "':'" + org.Id + "',";
}
organizations = organizations.Substring(0, organizations.Length - 1);
}
结果操作:organizations = "'Passport':'14f0eac0-43eb-4c5f-b9fe-a09d2848db80','Bank':'ad1d77d8-7eb1-4a4c-9173-b0f2f7269644'";
在JS代码中输出数据。 但是当在浏览器中查看页面的源代码时,却没有得到想要的内容。 有什么问题?如何制作正常的报价?
JS:"data": "@organizations"
视图网页返回结果"data": "'Passport':'14f0eac0-43eb-4c5f-b9fe-a09d2848db80','Bank':'ad1d77d8-7eb1-4a4c-9173-b0f2f7269644'"
答案 0 :(得分:2)
好酷Q,试试这个来源:
@{
var model = Model.ToArray().Select(org => string.Format("'{0}':'{1}'", org.Name, org.Id));
var data = string.Join(",", model);
}
@Html.Raw(data)
答案 1 :(得分:1)
如果您更改
,该怎么办?"data": "@organizations"
到
"data": "@Html.Raw(organizations)"
答案 2 :(得分:0)
@Html.Raw(content)
答案 3 :(得分:0)
在这里的代码示例中,罪魁祸首是
@organizations
生成引号。你可以改用:
@Html.Raw(organizations)
好的,这很好,但通过创建JSON,您正在做框架可能为您做的工作。您可能需要一个框架可以为您序列化的模型。这样,您根本不需要视图标题中的任何代码。
@Html.Raw(JsonConvert.SerializeObject(Model.ToDictionary(m => m.Name, m => m.Id))))
上面,请注意我正在使用Json.NET,你可能想要将NuGET纳入你的项目,因为微软正在转向它。没有必要弄清楚如何使用旧的JSON序列化程序来做到这一点。另请注意,除非您将模型用于其他目的,否则您可以选择在视图外进行字典转换,从而减少视图中的代码工作。
接下来,如果要在视图中嵌入JSON,则可能需要考虑其他两个选项之一。如果数据量很小,请考虑使用the join method proposed by eli (here),而是将其编码为HTML 5“data-”元素并使用JavaScript加载。这样你就可以将javascript保留在视图之外。调试javascript时,这只是另一个令人困惑的步骤,寻找由动态生成的HTML初始化的变量。
更好的是,创建一个可重用的HTML帮助器方法,将模型转换为数据属性:How to use dashes in HTML-5 data-* attributes in ASP.NET MVC
最后,如果有许多JSON元素,请考虑单独发送数据。在控制器中使用简单的Json()方法渲染它,并在客户端代码中使用简单的jQuery $ .json()获取它。见here for an example
祝你好运!