【发布时间】: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