有一次,我通过调用
收集原始模型没有问题@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];
似乎没什么用。
我想要做的就是将一些经过修改的模型数据从服务器传回客户端,这样我就可以对不断变化的模型数据作出反应。
有什么建议吗?
答案 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)));
。这应该可以解决你的问题。回顾我的项目,这是我使用的语法,它没有给我任何问题。