我通过ViewBag将JSON对象传递给Javascript,我的视图中包含以下代码:
var jsonResultData = @Html.Raw(ViewBag.JsonResultData);
这种方法工作正常,但VisualStudio不断给我一个'条件编译已关闭'警告。似乎VS想要@ Html.Raw(ViewBag.JsonResultData)的引用;如果我添加引号,jQuery会将变量视为字符串而不是JSON数据。
我的方法有缺陷吗?还有另一种方法我应该接近这个吗?如果没有,我可以禁用VS警告吗?警告的一个恼人的副作用是我无法使用CTRL K-D格式化我的代码。
答案 0 :(得分:9)
为什么使用ViewBag?我想在你的控制器操作中你已经手动将一些模型序列化为JSON,不是吗?像这样:
public ActionResult Foo()
{
var model = ...
ViewBag.JsonResultData = new JavaScriptSerializer().Serialize(model);
return View(model);
}
我不建议你这样做。而是这样做:
public ActionResult Foo()
{
var model = ...
return View(model);
}
并在您看来:
<script type="text/javascript">
var jsonResultData = @Html.Raw(Json.Encode(Model));
</script>
就警告而言,Razor Intellisense远非完美。您可能确实会收到一些警告,特别是当您将razor与javascript混合使用时。我们只希望他们能在未来的ASP.NET MVC版本中解决这个问题。暂时忽略那些警告。说实话,当我使用视图时,我不再查看Visual Studio中的警告或错误,因为我事先知道它们是错误的,并且我的应用程序在运行时运行良好。