代码之家  ›  专栏  ›  技术社区  ›  Peter J

局部视图的渲染局部和动态选择

  •  1
  • Peter J  · 技术社区  · 17 年前

    我的MVC应用程序包含一个父模型,它将包含一个或多个子模型。

    我已经设置了主视图来显示父模型的属性,然后循环访问子模型的集合(各种类型,但都继承自同一基类型)。每个子模型都有一个对应的局部视图。

    我的“父”视图迭代子模型,如下所示:

    foreach (ChildBase child in ViewData.Model.Children)
    {
      Html.RenderPartial("Partials/"+child.ChildType.ToString()+"Child", 
        section);
    }
    

    我的应用程序有适当的/partials/childtype1.ascx、childtype2.ascx等。一切都很好。

    1. 这是使用局部视图的适当方法吗?由于动态名称的原因,它感觉有点不稳定,但是我不知道在不使用大开关语句的情况下执行正确视图的动态选择的另一种方法。

    2. 对于同一型号的多个“模式”,建议使用相同的视图吗?我想使用相同的.ascx来显示模型的“只读”视图,以及一个编辑表单,基于该表单,控制器操作用于返回视图。

    1 回复  |  直到 17 年前
        1
  •  1
  •   Lewis    17 年前

    标志性的,

    如果不知道你想要达到的目标,很难回答这些问题。

    不过,我想试试:

    如果您熟悉Web窗体,那么现在将您的部分视图视为Web窗体用户控件,并将与部分视图相关的模型部分视为希望传递给部分视图的“信息片段”。

    使用局部视图的自然选择是针对站点中许多视图中使用的元素。

    所以…回答:

    1.虽然你所做的是正确的,但似乎不太正确。我使用的部分视图的一个示例可能是数据网格中的一行,在该网格中,您将调用传入行对象的部分视图作为其模型:

        foreach (MyObject o in Model.objects)
    {
      Html.RenderPartial("Shared/gridRowForObject.ascx", o, ViewData);
    }
    

    您可以强烈地键入视图,也可以期望将特定类型作为模型对象传递。

    另一种用法可能是登录框或“联系我”窗体等。

    2.最终这是一个个人设计决策,但我会选择需要最少的应用程序/表示逻辑和视图中最干净的代码的选项。例如,我倾向于避免在您的视图中编写许多条件调用,并通过推断一个基类型来传递到您的所有部分视图,就像在您的示例中一样,可能会将您束缚住。

    在学习MVC框架时,我发现oxite代码很有用。

    希望有帮助。

    推荐文章