4

在视图中,

@{
    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'"

4

4 回答 4

2

OK cool Q,try this source:

@{
    var model = Model.ToArray().Select(org => string.Format("'{0}':'{1}'", org.Name, org.Id));
    var data = string.Join(",", model);
}

@Html.Raw(data)
于 2012-09-06T05:21:01.613 回答
1

What if you change

"data": "@organizations"

to

"data": "@Html.Raw(organizations)"
于 2012-09-06T05:20:51.930 回答
0

@Html.Raw(content)

And check this one out: http://jeffreypalermo.com/blog/what-is-the-difference-in-lt-variable-gt-and-lt-variable-gt-in-asp-net-mvc/

于 2012-09-06T05:23:24.537 回答
0

在您的代码示例中,罪魁祸首是

@organizations

生成引号。您可以改为使用:

@Html.Raw(organizations)

好的,这很好,但是通过创建 JSON,您正在做框架可以为您做的工作。您可能想要一个框架可以为您序列化的模型。这样,您甚至根本不需要视图标题中的任何代码。

@Html.Raw(JsonConvert.SerializeObject(Model.ToDictionary(m => m.Name, m => m.Id))))

上面,请注意我正在使用 Json.NET,您可能希望将 NuGET 加入到您的项目中,因为 Microsoft 正在转向它。弄清楚如何使用旧的 JSON 序列化程序来执行此操作毫无意义。另请注意,除非您将模型用于其他目的,否则您可能会选择在视图之外进行字典转换,从而减少视图中的代码工作。

接下来,如果您在视图中嵌入 JSON,您可能需要考虑其他两个选项之一。如果数据量很小,可以考虑使用eli (here) 提出的 join 方法,而是将其编码为 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() 获取它。有关示例,请参见此处

祝你好运!

于 2012-09-06T05:26:18.510 回答