-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,哪一個是首選?
感謝 克里斯
你曾經聽說過Knockout JS嗎?您可以使用它來實現客戶端MVVM模式 - 將您用於構建頁面的模型數據轉換爲JavaScript視圖模型,然後使用它來動態更新頁面上的元素以響應客戶端更新。我會看看是否可以在這裏找到一個簡短的解釋(雙關語),但請查看網站:http://knockoutjs.com/ –
請參閱[本答覆]的第二部分(http://stackoverflow.com/問題/ 28627421 /更好的方式加載2下拉在MVC/28640420#28640420) –
更具體地說,這個問題的答案可能會讓你一些洞察你的具體查詢是否使用ViewBag或Session:http://stackoverflow.com/questions/12676924/what-is-the-right-time-for-viewdata-viewbag-session-tempdata –