【发布时间】:2017-02-15 22:23:01
【问题描述】:
我正在尝试构建一个带有两个下拉菜单的 UI。第一个是“类别”,第二个是“子类别”。我可以在我的剃刀视图中建立一个“类别”的静态列表。我希望在“类别”更改时动态更新“子类别”项目列表。我正在尝试将所有类别信息从服务器端传递到客户端,因为列表不大并且没有安全问题。但是我找不到一种格式化数据并将其传输到客户端的好方法。我可以使用以下代码生成一个包含所有类别树的 json 对象:
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 视图模型,然后使用它来动态更新页面上的元素以响应客户端更新。我会看看我是否可以在这里敲出(双关语)一个简短的解释,但请查看网站:knockoutjs.com
-
参考this answer第二部分
-
更具体地说,这个问题的答案可能会让您对是否使用 ViewBag 或 Session 的具体查询有所了解:stackoverflow.com/questions/12676924/…
标签: javascript jquery json asp.net-mvc