【问题标题】:javascript literals from C# - avoiding warnings来自 C# 的 javascript 文字 - 避免警告
【发布时间】:2013-09-01 21:07:36
【问题描述】:

首先,这段代码确实有效,但它给了我一些我想摆脱的烦恼。我有一个使用 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>

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

我完全接受询问这个问题是迂腐和琐碎的,因为代码运行良好并且看似干净,但它让我烦恼。

【问题讨论】:

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

标签: javascript asp.net-mvc-4 knockout.js razor-2


【解决方案1】:

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"};

【讨论】:

    【解决方案2】:

    '您可以在 ActionMethod 中将您的模型序列化为 Json,然后通过 ViewData 或 ViewBag 将其传递给您的视图,然后使用 Html.Raw 将其传递给 ViewModel,如下所示:

    //在你的ActionMethod中

    var serializer = new JavaScriptSerializer();

    Viewdata["SomeName"] = serializer.Serialize(model);

    //在你的cshtml中

    @{

    字符串数据 = (string)Viewdata["SomeName"];

    }

    $(document).ready(function() {

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

    【讨论】:

      【解决方案3】:

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

      var data = ;
      

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

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

      有了这个,警告就会消失。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-08
        • 1970-01-01
        • 1970-01-01
        • 2014-08-20
        • 2016-12-25
        • 2021-02-04
        • 1970-01-01
        相关资源
        最近更新 更多