Javascript ASP.NET:非法字符'@';在'@Html.Raw';呼叫

Javascript ASP.NET:非法字符'@';在'@Html.Raw';呼叫,javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,在某一点上,我通过调用以下命令收集原始模型没有问题: @Html.Raw(Json.Encode(Model)); 但现在我得到了这个错误: Uncaught SyntaxError: Unexpected toke ILLEGAL 在Chrome和IE中,它正好指向那个“@”字符 我有这样的想法(正如另一篇stackoverflow帖子所建议的): 这(在另一个stackoverflow帖子中也建议): 似乎什么都不管用 我所要做的就是将一些修改后的模型数据从服务器传回客户机,以便对不断变

在某一点上,我通过调用以下命令收集原始模型没有问题:

@Html.Raw(Json.Encode(Model));
但现在我得到了这个错误:

Uncaught SyntaxError: Unexpected toke ILLEGAL
在Chrome和IE中,它正好指向那个“@”字符

我有这样的想法(正如另一篇stackoverflow帖子所建议的):

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

似乎什么都不管用

我所要做的就是将一些修改后的模型数据从服务器传回客户机,以便对不断变化的模型数据做出反应


有什么建议吗?

试着把它改成
@(Html.Raw(Json.Encode(Model))取而代之。这会解决你的问题。回顾我的项目,这是我使用的语法,它不会给我任何问题

Razor代码仅适用于cshtml或vbhtml文件。JS文件不是由Razor预处理的。因此,您只是将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>

var MyNamespace=MyNamespace | |{};
MyNamespace.RawModelData=@Html.Raw(Json.Encode(Model));

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

您可以尝试将脚本移出.JS文件,并将其放入局部视图

使用dynamic作为模型类型,并使局部视图代码如下所示

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

@(Html.Raw(Json.Encode(Model))
我没有广泛使用razor,但我通常使用
@{}
对于块语句,
@()
对我来说似乎有点奇怪。。为了澄清,此代码段位于正在处理的
cshtml
vbhtml
页面中,对吗?在哪个文件中执行此操作?cshtml?@kformeck,请及时回复。。我看到这里发生了两个不同的错误。。一个在您的用户代理(浏览器)中-这表示“@Html.Raw”未被处理。。。您的浏览器/用户代理永远不会看到razor代码。。他们应该只看到输出;第二个错误在ASP.NET中(您的标题是此错误的唯一指示)。。这建议您在包含您提供的代码片段的文件/代码上执行
@Html.Raw
。js文件不会识别
@Html
,无论过去还是现在都不会识别它们@jgabb,我认为现在判断这是否是问题还为时过早。。尽管如此,你的建议在正常情况下仍然有效。这不起作用,是因为我在一个.js文件中吗?是的。这就是原因。谢谢你的澄清;我应该在我的cshtml文件中嵌入一个简单的脚本来解决这个问题吗?是的,只需在cshtml文件中包含脚本即可。记住不要使用
@(Html.Raw(Json.Encode(Model))在你的js文件中。。在cshtml文件中执行此操作。
<script>
    var MyNamespace = MyNamespace || {};
    MyNamespace.RawModelData = @Html.Raw(Json.Encode(Model));
</script>
<script src="/path/to/external.js"></script>
@model dynamic
<script type="text/javascript">
    var getRawLayoutData = function() { return @Html.Raw(Json.Encode(Model)); }
    var rawModelData = getRawLayoutData();
</script>
@Html.Partial("_Scipt", Model)