我的Razor视图中有这样的代码
<script>
var JsModel = @Html.Raw(Json.Encode(CsModel));
</script>
这个工作就好了。它将从控制器接收的C#模型转换为JS对象,后者用于使用标记和其他各种东西填充Google Map。
问题是,Visual Studio在这一行中显示了一个很大的红色语法错误,这让我感到疯狂。代码非常好,模型总是非空的,编码总是有效。但Razor解析器,或者甚至是R#,我不确定是哪个,因为它似乎忽略了C#代码。所以它看到的只是var JsModel = ;
并抱怨。
任何方式让我告诉它,这没关系?我能在这做什么?
答案 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实例。
所以把它包装成函数并从那里返回会对你有用。