【问题标题】:ASP.NET MVC: Getting ViewModel into partial view on ViewPageASP.NET MVC:让 ViewModel 进入 ViewPage 的部分视图
【发布时间】:2010-10-01 17:44:55
【问题描述】:

我有一个ViewPage,Index.aspx。在里面,我有:

<%= 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)); %>

Index.aspx 不是强类型视图;它不使用视图模型。但是我是否应该使用具有公共Cache 成员的视图模型对其进行强输入,然后通过Model 访问它?

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

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

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

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

【问题讨论】:

    标签: asp.net-mvc model view


    【解决方案1】:

    就我个人而言,我将它作为与视图关联的模型的一部分。并在控制器中加载该属性......所以我想我会按照上面的#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 };
        }
    }
    

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

    【讨论】:

    • 我喜欢这个。如果我能让我的同事加入,这就是我计划的方向。感谢您的备份支持。 :)
    • 理由+1;出于这个原因,我自己更喜欢选项二。
    • +1 我就是这样做的。我想补充一点,根据场景,您可以在动作过滤器中进行额外提升。
    • 这是我刚刚看到的一个链接,它描述得差不多:lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/…
    【解决方案2】:

    我更喜欢 MVC2 的第二个选项,如果您知道在应用上线时将使用 MVC3(并且确信该功能将保留),则第三个选项。

    您列出的选项基本上代表了 MVC 版本中的一系列功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2010-12-02
      相关资源
      最近更新 更多