如何解决这个“语法错误”?在剃须刀

本文关键字:语法错误 错误 语法 剃须刀 何解决 解决 | 更新日期: 2023-09-27 18:19:01

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

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

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

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

有什么办法让我告诉它没关系吗?我在这里能做什么?

如何解决这个“语法错误”?在剃须刀

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

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

使用函数如下所示:

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实例。

那么将它包装成函数并从那里返回就可以了