代码之家  ›  专栏  ›  技术社区  ›  SnickersAreMyFave

ASP.NETMVC:将ViewModel放入ViewPage的部分视图中

  •  0
  • SnickersAreMyFave  · 技术社区  · 14 年前

    我有一个 ViewPage

    <%= Html.Partial("~/Index/ViewUserControl/Promo.ascx, new PromoViewModel()); %>
    

    PromoViewModel 需要一个 MemcachedCache

    我该怎么通过这个 MemcachedCache 在我的观点里?

    我应该把 MemcachedCache 中的实例 ViewData 然后做这个?

    <%= Html.Partial("~/Index/ViewUserControl/Promo.ascx,
        new PromoViewModel(ViewData["cache"] as MemcachedCache)); %>
    

    索引.aspx不是强类型视图;它不使用视图模型。但是我应该用一个具有公共 Cache 成员,然后通过 Model ?

    <%= Html.Partial("~/Index/ViewUserControl/Promo.ascx, 
        new PromoViewModel(Model.Cache); %>
    

    现在我发现MVC3有第三种选择:我可以设置 ViewModel 在索引控制器中使用 成员,并像这样使用它:

    <%= Html.Partial("~/Index/ViewUserControl/Promo.ascx, 
        new PromoViewModel(ViewModel.Cache); %>
    

    哪个更合适?这对我来说似乎有点困惑/愚蠢。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Bryce Fischer    14 年前

    就我个人而言,我把它作为与视图相关联的模型的一部分。并在控制器中加载该属性。。。所以我想我是按照上面的第2条的思路说的。除了我的视图的模型将包含“PromoViewModel”实例:

    public class MainViewModel {
        public string Prop1{get; set;}
    
        public PromoViewModel Promo {get; set; }
    }
    
    public class MainController {
        public ActionResult Hello() {
            // Retrieve "cache" or whatever
            var promoModel = new PromoViewModel(cache);
    
            return new MainViewModel {Prop1 = "Hello", Promo = promoModel };
        }
    }
    

    我的理由是我的视图模型就是这样,它是我需要在页面上显示的所有内容。我的控制器负责组装它,各种各样的服务做大部分的工作,等等。。。

        2
  •  0
  •   Andrew Barber Tejas Tank    14 年前

    我更喜欢你的第二个选择MVC2,第三个如果你知道你将使用MVC3当应用程序上线(并有信心该功能将保留)。