来自C#的javascript文本-避免警告

来自C#的javascript文本-避免警告,javascript,asp.net-mvc-4,knockout.js,razor-2,Javascript,Asp.net Mvc 4,Knockout.js,Razor 2,首先,这段代码确实有效,但它给了我一个我想摆脱的低水平的烦恼。我有一个使用razor语法构建的.cshtml页面。有一个大的,讨厌的,击倒的对象生活在幕后,页面上的许多东西都与之绑定。目前,在实例化该淘汰模型时,我是通过在字符串文本中序列化相关的C#viewmodel对象来实现的,如下所示 <script type="text/javascript"> $(document).ready(function() { var data = @Htm

首先,这段代码确实有效,但它给了我一个我想摆脱的低水平的烦恼。我有一个使用razor语法构建的.cshtml页面。有一个大的,讨厌的,击倒的对象生活在幕后,页面上的许多东西都与之绑定。目前,在实例化该淘汰模型时,我是通过在字符串文本中序列化相关的C#viewmodel对象来实现的,如下所示

<script type="text/javascript">
        $(document).ready(function() {
            var data = @Html.Raw(Json.Encode(Model));
            var contentListingModel = new ContentListingModel(data);
            ko.applyBindings(contentListingModel, $('#pageRoot').get(0));
        });
</script>

$(文档).ready(函数(){
var data=@Html.Raw(Json.Encode(Model));
var contentListingModel=新contentListingModel(数据);
applyBindings(contentListingModel,$('#pageRoot').get(0));
});
就像我说的,代码是有效的。然而,在@Html.Raw的电话线上,我得到了一个警告。VisualStudio认为存在语法错误(渲染后没有语法错误)。现在,这完全有道理,为什么它认为那里有语法问题。但我希望通过编写不会触发此问题的代码来消除警告(我意识到我可以隐藏警告或做任何其他事情),但我只希望在我将C#对象序列化为JSON并将它们填充到页面上的javascript中的情况下不显示警告。有什么想法吗


我完全接受询问这个问题是迂腐和琐碎的,因为代码工作得非常好,看起来很干净,但它让我很恼火。

'

//在你的行动方法中

var serializer=新的JavaScriptSerializer()

Viewdata[“SomeName”]=序列化程序。序列化(模型)

//在您的cshtml中

@{

字符串数据=(字符串)视图数据[“SomeName”]

}

$(文档).ready(函数(){


javascript调试器忽略razor代码,并查看以下内容

var data = ;
这是一个语法错误,请替换此

var data = @Html.Raw(Json.Encode(Model));
这样,警告就会消失

var data @('=') @Html.Raw(Json.Encode(Model));

IDE足够智能,可以接受纯粹由Razor组成的行,因此您可以编写:

@Html.Raw( "var data= " + Json.Encode(Model) + ";" )
alert(data);
如果(假定的)隐式全局变量困扰您(例如,它触发了一个重竖琴警告),请拆分声明和赋值

var data; // javascript
@Html.Raw( "data= " + Json.Encode(Model) + ";" ) // all razor
它在运行时生成:

var data;
data = {"foo": "bar"};

你能不能把它封装在一个字符串文字中?var data='@Html.Raw(Json.Encode(Model))';警告说什么?
var data;
data = {"foo": "bar"};