【问题标题】:how to pass complicated data between mvc and javascript如何在 mvc 和 javascript 之间传递复杂的数据
【发布时间】: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


【解决方案1】:

你可以做你想做的事;你所拥有的应该是正确的格式,但你只需要包含 Html.Raw。

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

Raw 本质上会直接写入响应而不对内容进行编码,这可能是发生的情况。

【讨论】:

    猜你喜欢
    • 2018-07-24
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2016-01-22
    • 2014-11-08
    相关资源
    最近更新 更多