Visual Studio"关闭Conditiional编译"传递JSON对象时视图中出错

Mar*_*ark 3 javascript visual-studio razor

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

var jsonResultData = @Html.Raw(ViewBag.JsonResultData);
Run Code Online (Sandbox Code Playgroud)

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

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

Dar*_*rov 9

你为什么使用ViewBag?我想在你的控制器操作中你已经手动将一些模型序列化为JSON,不是吗?像这样的东西:

public ActionResult Foo()
{
    var model = ...
    ViewBag.JsonResultData = new JavaScriptSerializer().Serialize(model);
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

我不建议你这样做.而是这样做:

public ActionResult Foo()
{
    var model = ...
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

在你看来:

<script type="text/javascript">
    var jsonResultData = @Html.Raw(Json.Encode(Model));
</script>
Run Code Online (Sandbox Code Playgroud)

就警告而言,Razor Intellisense远非完美.您可能确实会收到一些警告,特别是当您将razor与javascript混合使用时.我们只希望他们能在未来的ASP.NET MVC版本中解决这个问题.暂时忽略那些警告.老实说,当我处理视图时,我不再查看Visual Studio中的警告或错误,因为事先我知道它们是错误的并且我的应用程序在运行时工作得很好.