@ Html.Raw(Json.Encode(Model)) - 我可以在整个应用程序中使用序列化模型吗?

时间:2014-03-02 07:16:15

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

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

查看/共享/ 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

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

1 个答案:

答案 0 :(得分:0)

  

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

是的,如果模型在范围内,您可以在整个应用程序中使用该模型。你的C#View Model序列化为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#View模型。无需再引用返回引导对象。通常,一旦将引导对象转换为集合或模型,就不需要再引用它,因此术语引导程序 - 它纯粹是为了创建Backbone数据结构。

您可以详细了解这个herehere

相关问题