Asp.NET MVC视图中的引用

时间:2012-09-06 05:12:32

标签: asp.net asp.net-mvc razor view

在视图中,

@{
    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 个答案:

答案 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)

答案 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

祝你好运!