2011-04-06 70 views
0

如何在ASP.Net MVC 3中创建视图,将视图的一部分创建/呈现到另一个视图/控制器,而不知道设计时间什么视图/控制器将被推迟到什么时候?如何在ASP.Net MVC 3中创建复合视图?

我有一个使用布局页面的仪表板视图/控制器。仪表板视图完成了渲染整个屏幕的大部分工作。但是整个屏幕中的某个占位符部分将根据业务规则,配置,用户交互等而有所不同。可能需要在占位符部分呈现三个单独的插件视图/控制器。一旦仪表板控制器确定哪个插件应该可见,我如何指示仪表板视图呈现特定的插件视图。我已经通过在Dashboard模型中放置标志,然后在Dashboard视图中使用基于标志的相应参数调用Html.RenderAction来实现这一点。这似乎并不令人满意,我认为已经有一种简单的内置功能用于这种场景,请告知。

谢谢

回答

0

你可以写你自己的HtmlHelper和使用,在您的视图,而不是使用标志。

1

你真的在问:“我该如何动态渲染部分视图,谁在设计时就知道身份。

可以通过Html.RenderPartial或Html.RenderAction两种方式获得。两者都有自己的位置。如果主页面“知道”足以获得视图数据,那么RenderPartial是更好的选择,因为它比RenderAction更高效。如果您只知道门户小部件的唯一标识符,而不是RenderAction的工作原理,因为您现在拥有完全有效的控制器方法,可以执行诸如回到数据库并呈现视图等操作。

+0

其实你错过了我不知道的**设计**时间的关键点,哪些插件将被加载,直到**运行时**才知道。 – apalmer 2011-04-06 18:48:46

+1

RenderPartial将一个字符串和一个对象作为参数,在运行时很容易覆盖。 RenderAction是一个控制器方法,因此它可以自己加载对象并找出要渲染的视图。我知道,我已经有了一些基于窗口小部件的系统,可以完成这些工作来渲染在设计时不存在的组件。 – 2011-04-06 20:22:58