【问题标题】:How do I render an alternate child view in MVC?如何在 MVC 中呈现备用子视图?
【发布时间】:2009-12-22 18:22:50
【问题描述】:

我是使用 MVC 的新手,所以请不要以为我什么都知道。

我正在挑选一个已经用 MVC 编写的项目,我正在尝试向它添加一些东西。

在一个视图上有一行

<% Html.RenderAction("List", "Image", new { id = Model.JobId, all = true });  %>

我在 Image 目录下看到一个 List.ascx。我在视图控制器上看到了 List 方法。

我想将该列表方法的结果呈现到不同的 ascx 文件。 (AssignImage.ascx) 我意识到我可以在控制器上添加另一个方法,但似乎我应该有一种使用相同方法但不同视图的方法。

【问题讨论】:

    标签: asp.net-mvc renderaction


    【解决方案1】:

    在你的 Action 方法中

    if (isList) return PartialView("List"); else return PartialView("AssignImage");

    【讨论】:

    • 那么Action方法决定视图?似乎我应该能够以某种方式从控制器请求数据并让视图确定布局......也许我正在考虑它向后/传统的 asp.net 方式。
    • 是的,动作决定了视图。视图,根据 MVC 模式,应该是非常愚蠢的,不会做出那样的决定。
    【解决方案2】:

    如果您不介意重用(或复制)某些代码,我可能会采取新的行动来处理这个问题。

    我不认为我会更改操作以传入另一个参数(该操作已经采用 2:一个 jobId 和一个布尔值)。您可能必须在某处更改现有代码以考虑第三个参数。

    假设该操作只是给您一个记录列表,我看不出使用一行 LINQ(或者您正在获取数据)添加一个新操作会如何冒犯 DRY ......尤其是如果它使代码通过不在一个动作中混合太多功能,更易于维护。如果它太冒犯了,那么您可以重构这些动作以调用一些常用方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2018-12-11
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多