2009-12-22 55 views
1

我刚与MVC合作,所以请不要以为我知道任何事情。如何在MVC中渲染备用子视图?

我正在捡起一个已经写得很多的项目,我正在尝试向它添加一些东西。

的一个显示有一行

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

我看到的图片目录下List.ascx。我在视图控制器上看到List方法。

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

回答

1

如果你不介意重复使用(或复制)一些代码,我可能只是做一个新的行动来处理这个问题。

我不认为我会改变行动传递给另一个参数(行动已经采取2:一个jobId和布尔)。你可能不得不改变现有的代码来解释第三个参数。

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

2

在动作方法

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

+0

所以Action方法决定视图?似乎我应该能够从控制器以某种方式请求数据,并让视图确定布局......也许我正在考虑向后/传统的asp.net方式。 – 2009-12-22 18:35:53

+1

是的,动作决定了视图。根据MVC模式,视图应该非常愚蠢,而不是像那样做出决定。 – 2009-12-22 18:38:40