2017-02-15 26 views
-1

我試圖用兩個下拉菜單構建UI。第一個是「類別」,第二個是「子類別」。我可以在剃刀視圖中構建一個「類別」的靜態列表。我希望「子類別」項目列表在「類別」更改時動態更新。我試圖從服務器端傳遞所有類別信息到客戶端,因爲列表不大,並且沒有安全問題。但是我找不到格式化數據並將其傳輸到客戶端的好方法。我可以使用以下代碼生成所有類別樹的json對象:如何在mvc和javascript之間傳遞複雜數據

ExpandoObject catToSubcatMap = new ExpandoObject(); 
foreach (var cat in repository.Categories) 
{ 
      var subcats = repository.SubCategories.Where(s => s.ParentID == cat.CategoryID); 
      List<Object> subcatNameList = new List<object>(); 
      foreach(var subcat in subcats) 
      { 
       subcatNameList.Add(new { Name = subcat.Name }); 
      } 
      AddProperty(catToSubcatMap, cat.Name, subcatNameList); 
} 
Session["CatToSubcatMap"] = JsonConvert.SerializeObject(catToSubcatMap, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); 

json本身看起來很完美。但是,當我試圖讀取我的jQuery函數值,它失敗:

var sss = '@Session["CatToSubcatMap"]'; 

好像有在JSON字符串太多的特殊字符。我的通用問題是:我應該如何在服務器和客戶端之間格式化和傳遞複雜的數據。使用Viewbag或Session,哪一個是首選?

感謝 克里斯

+0

你曾經聽說過Knockout JS嗎?您可以使用它來實現客戶端MVVM模式 - 將您用於構建頁面的模型數據轉換爲JavaScript視圖模型,然後使用它來動態更新頁面上的元素以響應客戶端更新。我會看看是否可以在這裏找到一個簡短的解釋(雙關語),但請查看網站:http://knockoutjs.com/ –

+1

請參閱[本答覆]的第二部分(http://stackoverflow.com/問題/ 28627421 /更好的方式加載2下拉在MVC/28640420#28640420) –

+0

更具體地說,這個問題的答案可能會讓你一些洞察你的具體查詢是否使用ViewBag或Session:http://stackoverflow.com/questions/12676924/what-is-the-right-time-for-viewdata-viewbag-session-tempdata –

回答

0

你可以做你正在嘗試做的;你有什麼應該被正確格式化,但你只需要包含Html.Raw。

var sss = @(
      Html.Raw(Session["CatToSubcatMap"].ToString()) 
     ); 

原料將主要寫出來直接到應答,而不編碼的內容,這是有可能發生的事情。

相關問題