2012-09-06 141 views
4

在View,行情在Asp.NET MVC視圖

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

回答

2

OK酷Q,試試這個來源:

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

@Html.Raw(data) 
+0

太棒了,謝謝! – Qwofer

1

如果你所改變

"data": "@organizations" 

"data": "@Html.Raw(organizations)" 
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

祝你好運!