【问题标题】:How to fix this "syntax error" in Razor?如何修复 Razor 中的“语法错误”?
【发布时间】:2014-08-22 09:23:10
【问题描述】:

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

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

这个工作就好了。它将从控制器接收到的 C# 模型转换为 JS 对象,该对象稍后用于使用标记和其他各种内容填充 Google 地图。

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

我有什么方法可以告诉它没关系?我可以在这里做什么?

【问题讨论】:

  • 顺便说一句,你的照片让我想起了一位印度演员,请参阅链接mtv.in.com/photos/splitsvilla-7/…:P
  • 呵呵 :) 是的,从你的照片看你有点像他

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


【解决方案1】:

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

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

【讨论】:

  • 需要那个@Html.Raw吗?
  • 是的,没有它你会得到{&amp;quot;count&amp;quot;: 15} 而不是{"count": 15} 这会破坏一切。
【解决方案2】:
<script>
  var JsModel = '@Html.Raw(Json.Encode(CsModel))';  //apply single quotes as shown
</script>

【讨论】:

  • 嗯,只是把它变成了一个字符串。那里不应该有某种 eval 将该字符串转换为 JS 对象吗?
  • @Davor..使用单引号时功能不会发生变化,这只是语法问题..
  • 不,它将语法从 var json = {"count": 15}; 之类的东西更改为 var json = '{"count": 15}'; ,它会立即将 JSON 评估为一个对象,它会创建一个包含需要评估的 json 的字符串变量。虽然它不起作用,但你的回答让我知道了如何解决这个问题,所以绝对 +1。
  • 你可以使用JSON.parse()
  • @EhsanSajjad - 是的,我就是这样解决的,并将其作为答案发布。并立即被否决。人们...
【解决方案3】:

使用功能如下图:

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

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

【讨论】:

  • 感谢您的回答。我设法在一行中解决了它而没有添加额外的功能(这真的让我很烦恼),所以我不能接受这个作为答案,但我学到了一些有用的东西,另外,它可以工作并解决问题,所以绝对+1。
  • 没问题,很高兴它对你有所帮助,即使我学到了一些新东西@Davor
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2019-08-21
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
相关资源
最近更新 更多