ASP.NET:'@ Html.Raw'调用中的非法字符'@'

时间:2015-11-16 17:25:36

标签: javascript asp.net-mvc razor

有一次,我通过调用

收集原始模型没有问题
@Html.Raw(Json.Encode(Model));

但现在我收到了这个错误:

Uncaught SyntaxError: Unexpected toke ILLEGAL

在Chrome和IE中,它指向'@'字符

我有这个(正如另一个stackoverflow帖子中所建议的那样):

var getRawLayoutData = function() { return @Html.Raw(Json.Encode(Model)); }
var rawModelData = getRawLayoutData();

和这个(也在另一个stackoverflow帖子中建议):

var rawModelData = [@Html.Raw(Json.Encode(Model))][0];

似乎没什么用。

我想要做的就是将一些经过修改的模型数据从服务器传回客户端,这样我就可以对不断变化的模型数据作出反应。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您可以随时尝试将脚本移出.js文件并将其放入局部视图中。

使用dynamic作为模型类型,并将部分视图代码设为这样。

@model dynamic
<script type="text/javascript">
    var getRawLayoutData = function() { return @Html.Raw(Json.Encode(Model)); }
    var rawModelData = getRawLayoutData();
</script>

然后,您在主视图中重新加载javascript文件,只需使用此文件

@Html.Partial("_Scipt", Model)

答案 1 :(得分:1)

Razor代码仅适用于cshtml或vbhtml文件。 Razor没有对JS文件进行预处理。因此,您只是将Razor代码作为JS(无效的JS)直接发送到浏览器。只是将所有JS代码转储到视图中,您只需在视图中设置变量,然后在外部JS文件中访问它。我建议使用命名空间,这样就不会污染全局命名空间并冒险与其他JavaScript代码发生冲突。

查看

<script>
    var MyNamespace = MyNamespace || {};
    MyNamespace.RawModelData = @Html.Raw(Json.Encode(Model));
</script>
<script src="/path/to/external.js"></script>

然后,在您的外部JS中,您可以根据需要引用MyNamespace.RawModelData

答案 2 :(得分:0)

请尝试将其更改为@(Html.Raw(Json.Encode(Model)));。这应该可以解决你的问题。回顾我的项目,这是我使用的语法,它没有给我任何问题。