如何解决Razor中的“语法错误”?

时间:2014-08-22 09:23:10

标签: c# javascript asp.net-mvc razor

我的Razor视图中有这样的代码

<script>
    var JsModel = @Html.Raw(Json.Encode(CsModel));
</script>

这个工作就好了。它将从控制器接收的C#模型转换为JS对象,后者用于使用标记和其他各种东西填充Google Map。

问题是,Visual Studio在这一行中显示了一个很大的红色语法错误,这让我感到疯狂。代码非常好,模型总是非空的,编码总是有效。但Razor解析器,或者甚至是R#,我不确定是哪个,因为它似乎忽略了C#代码。所以它看到的只是var JsModel = ;并抱怨。

任何方式让我告诉它,这没关系?我能在这做什么?

3 个答案:

答案 0 :(得分:2)

我们可以通过将原始json放入引号,然后欺骗解析器,然后使用JQuery eval(或您喜欢的任何其他eval)将字符串转换为对象来解决这个问题。

<script>
    var JsModel = $.parseJSON('@Html.Raw(Json.Encode(CsModel))');
</script>

答案 1 :(得分:1)

<script>
  var JsModel = '@Html.Raw(Json.Encode(CsModel))';  //apply single quotes as shown
</script>

答案 2 :(得分:1)

使用如下所示的功能:

function SetMyValue(value){
    return value;
}

var JsModel = SetMyValue(@Html.Raw(Json.Encode(CsModel)));

如此处http://msdn.microsoft.com/en-us/library/gg480740(v=vs.118).aspx:-

所述
  

此方法使用IHtmlString类包装HTML标记   呈现未编码的HTML。

Razor转义系统不会转义IHtmlString类型的任何内容。 Html.Raw()方法只返回一个包含文本的HtmlString实例。

所以把它包装成函数并从那里返回会对你有用。