【问题标题】:@Html.Raw(Json.Encode(Model)) - can i use serialized model throughout application?@Html.Raw(Json.Encode(Model)) - 我可以在整个应用程序中使用序列化模型吗?
【发布时间】:2014-03-02 07:16:14
【问题描述】:

我在一个示例中看到,您可以对从控制器返回的集合进行编码,并在脚本文件中将其用作 Json 对象的普通数组。

Views/Shared/Index.cshtml

 <script>
      var photos = @Html.Raw(Json.Encode(Model))
 </script>

这是在控制器返回数据的 cshtml 视图中完成的。然而,“照片”似乎在其他脚本文件中可见,可用于使用该数据填充主干模型。 我感兴趣的是它是如何工作的,引擎盖下到底发生了什么。当我们编码从控制器返回的 Json 格式模型时,该变量是否被缓存并贯穿应用程序的生命周期,并且不知何故是包含该数据的全局变量?谢谢

Scripts/app.js 文件中的代码:

var Photo = Backbone.Model.extend({ });

var firstPhoto= new Photo(photos[0]); // first photo model of the encoded collection

我可以这样做吗?例如,在我的 razor 视图中将模型序列化为 Json,并在我的应用程序的不同 .js 文件中使用模型?

【问题讨论】:

  • 您的主题行与您的问题不符,您的问题是什么?你试过骨干网站吗?不确定您在这里真正要求什么,并将其标记为过于宽泛

标签: javascript asp.net-mvc json asp.net-mvc-4 backbone.js


【解决方案1】:

我可以这样做吗?如,在我的剃刀视图中将模型序列化为 Json,然后 在我的应用程序中使用不同 .js 文件中的模型?

是的,只要模型在范围内,您就可以在整个应用程序中使用该模型。您的 C# 视图模型被序列化为 JSON 对象的幕后工作并不多。

...该变量是否已缓存并存在于 应用程序,并且不知何故是一个包含该数据的全局变量?

没有什么特别的事情发生,它的行为正常 - 如果您在窗口或文档上创建变量,那么您可以在任何地方使用它。如果您创建了一个局部变量,它将仅在该范围内可供您使用。

惯例是使用您需要的信息引导您的应用程序,并将该信息存储在您的应用程序命名空间中。

所以,在你的情况下,你会有类似的东西:

window.App = {
    Models: {},
    Collections: {},
    Views: {},
    Routers: {},
    Resources: {}
};

// App.Resources.Photos = @Html.Raw(Json.Encode(Model));
// So let's say your ViewModel contains an array of four Photo objects
// then your bootstrap object will look something like
App.Resources.Photos = [
        { Id: 1, Name: "Photo 1", Source: "mysite/photo1.png" },
        { Id: 2, Name: "Photo 2", Source: "mysite/photo2.png" },
        { Id: 3, Name: "Photo 3", Source: "mysite/photo3.png" },
        { Id: 4, Name: "Photo 4", Source: "mysite/photo4.png" }];

(function(){

    App.Models.Photo = Backbone.Model.extend({
        // whatever you want in here
    });

    App.Collections.Photo = Backbone.Collection.extend({
        model: App.Models.Photo,
        url: '/api/photos'
    });

    App.PhotoCollection = new App.Collections.Photo(App.Resources.Photos);

})();

您现在有一个 Backbone 集合,它是您的 C# 视图模型的直接表示。不再需要重新引用引导对象。通常,一旦您将引导对象转换为集合或模型,您就不需要再引用它,因此术语引导程序 - 它纯粹是为了您创建您的 Backbone 数据结构。

您可以阅读有关此herehere 的更多信息。

【讨论】:

    猜你喜欢
    • 2015-04-26
    • 2012-07-31
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多