Visual Studio“条件编译已关闭”传递JSON对象时视图中出错

时间:2011-05-11 21:39:52

标签: javascript visual-studio razor

我通过ViewBag将JSON对象传递给Javascript,我的视图中包含以下代码:

var jsonResultData = @Html.Raw(ViewBag.JsonResultData);

这种方法工作正常,但VisualStudio不断给我一个'条件编译已关闭'警告。似乎VS想要@ Html.Raw(ViewBag.JsonResultData)的引用;如果我添加引号,jQuery会将变量视为字符串而不是JSON数据。

我的方法有缺陷吗?还有另一种方法我应该接近这个吗?如果没有,我可以禁用VS警告吗?警告的一个恼人的副作用是我无法使用CTRL K-D格式化我的代码。

1 个答案:

答案 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中的警告或错误,因为我事先知道它们是错误的,并且我的应用程序在运行时运行良好。