C#中的javascript文字-避免警告

javascript literals from C# - avoiding warnings

本文关键字:警告 文字 中的 javascript      更新时间:2023-09-26

首先,这段代码确实有效,但它给我带来了一种低级别的烦恼,我希望摆脱这种烦恼。我有一个使用razor语法构建的.cs.html页面。有一个巨大的、令人讨厌的、令人震惊的物体生活在幕后,页面上的许多东西都与它绑定在一起。目前,在实例化该敲除模型时,我是通过在下面这样的字符串文本中序列化有问题的C#视图模型对象来实现的。

<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>

就像我说的,代码是有效的。然而,在@Html.Raw电话线上,我收到了警告。Visual Studio认为存在语法错误(渲染后没有)。现在,这完全有道理为什么这个东西认为存在语法问题。但我很想通过不触发这个问题的方式进行编码来消除警告(我意识到我可以隐藏警告或做任何其他事情),但我只想在我将C#对象序列化为JSON并将其填充到页面上的javascript中的情况下不显示它。有什么想法吗?

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

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

@Html.Raw( "var data= " + Json.Encode(Model) + ";" )
alert(data);

如果(假定的)隐式全局令您感到困扰(例如,它触发了Resharper警告),请拆分声明和赋值。

var data; // javascript
@Html.Raw( "data= " + Json.Encode(Model) + ";" ) // all razor

在运行时生成:

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

'您可以在ActionMethod中将您的模型序列化为Json,然后通过ViewData或ViewBag将其传递到您的视图,然后使用Html.Raw将其简单地传递到ViewModel,类似于以下内容:

//在您的ActionMethod 中

var serializer=新的JavaScriptSerializer();

Viewdata["SomeName"]=序列化程序。序列化(模型);

//在您的cshtml 中

@{

string data=(string)Viewdata["SomeName"];

}

$(document).ready(function){

        var contentListingModel = new ContentListingModel('@Html.Raw(data)');
        ko.applyBindings(contentListingModel, $('#pageRoot').get(0));
    });

javascript调试器忽略razor代码并查看此

var data = ;

这是一个语法错误,请替换此

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

这样,警告就会消失。

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