将公共属性公开给MVC模型

时间:2012-06-12 15:49:54

标签: asp.net-mvc

在MyMainView中,我有多个PartialViews。

每个PartialView都强烈地键入MyMainView中公开的属性,每个局部视图也包含一些常见信息。

例如

public class MainModel
{
    public SubModel1 { get; set; }
    public SubModel2 { get; set; }
    public SubModel3 { get; set; }
    public CommonStuff { get; set; }
}

是否有一种公认的做法来实现共同财产的共享?

我在考虑在SubModel中有一个属性,它反映回其父级。这是推荐/不推荐的吗?

例如

public class SubModel1
{
    public int Number { get; set; }
    public MainModel ParentModel { get; set; }
}

这里的主要目标是避免一遍又一遍地加载相同的数据。

对于我目前正在查看的模型,它是一系列在View中共享的LookUp词典,用于下拉列表等内容。

2 个答案:

答案 0 :(得分:0)

您可以使用子操作。 Phil Haack blogged关于他们。通过这种方式,您可以将整个公共功能封装到一个独立的模型/控制器/视图生命周期中,该生命周期与主要模型/控制器/视图生命周期不同,并将其嵌入为小部件。

答案 1 :(得分:0)

post将帮助您解决困惑。

在您的情况下,您可能需要在主操作中查询完整模型并将其提供给主视图。从主视图将主模型传递到部分视图,这些部分视图既依赖于子模型,也依赖于使用Html.RenderPartial的公共属性,或者只有部分视图的子模型,只需要那些。

如果要在局部视图中显示子模型并且局部视图不依赖于主模型,则应使用子操作,只需部分视图完全独立于主要观点

您也可以选择子操作,假设您需要为特定部分应用缓存行为。

您可以避免子操作,假设您希望在同一视图中的两个或多个部分视图中显示相同的模型,因为您必须反复查询数据。

因此,解决方案是您应该根据上述评论明智地选择子操作或Html.RenderPartials。