【问题标题】:How to parse objects from ViewBag to JavaScript?如何将对象从 ViewBag 解析为 JavaScript?
【发布时间】:2017-12-30 09:36:48
【问题描述】:

我正在尝试将 ViewBag 中的对象解析为 Javascript,但运气不佳。到目前为止,我已经尝试过使用 jQuery/razor/mixed 语法...无济于事。当我尝试使用 Json.Encode() 时,我收到“未定义错误”。

class Story 
{
    public long Id {get;set;}
    public string Description{get;set;}
}

控制器

[HttpGet]
public IActionResult Index(Story _story) 
{
    List<Location> Locations = this.context.Locations.ToList();
    ViewBag.story = _story;
    return View(context.Locations);
}

查看

$(document).ready(function() {
        var story = JSON.parse("@ViewBag.story");
        var story2try = '@(ViewBag.story)';

        console.log(@ViewBag.story.Id);
        console.log(story);
        console.log(story2try);
});

问题是第一个日志被打印出来,所以对于原始数据类型,如字符串/int/long,它可以工作,但不适用于对象。之后我收到此错误:

JSON 中位置 0 的意外标记 A SyntaxError: JSON 中位置 0 的意外标记 A

【问题讨论】:

  • 渲染出来的——浏览器看到的——视图是什么样子的。
  • '@(ViewBag.story)' 可能会给你类似Story - 即type.ToString()。您的控制器返回一个 object 而不是 JSON,因此没有任何解析。你应该可以使用var story = {}; story.Description = '@ViewBag.story.Description'; story.Id = @ViewBag.story.Id;
  • 你试过了吗:var story=JSON.parse("@((new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(ViewBag.Story))";
  • @Richard : 我得到了渲染类型的名称
  • @freedomn-m 所以基本上我必须逐个属性地获取所有对象?不,我没有尝试 System.Web.Script...

标签: jquery asp.net-mvc viewbag


【解决方案1】:

必须先序列化模型对象(如 cmets 中建议的那样)加上获取其原始内容(查看ASP.NET MVC using ViewData in javascript 线程),例如:

ViewBag.story = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(_story);

$(function () {
    var story = @Html.Raw(ViewBag.story);
    alert(story.Id);
});

【讨论】:

  • 这也在 .NET Core 中吗?
  • @user1913744 供核心使用 JSON.Net。 (我也会将 JSON.NET 用于 Framework:它比任何内置的 JSON 支持都更快、更灵活。)
  • 你会把代码放在哪里?是否可以在脚本块中执行此操作?
【解决方案2】:

所以经过无数次尝试,我设法解决了这个问题:

1。正如其他人指出的那样,使用 Newtonsoft.Json 库在控制器中序列化我的对象:

ViewBag._story =JsonConvert.SerializeObject(_story);  

2。在视图中,我将使用以下方法对其进行反序列化:

var _story=@(Html.Raw(ViewBag._story));

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    相关资源
    最近更新 更多