应该在哪里为Asp.net MVC视图准备非视图模型对象

时间:2010-11-25 02:16:35

标签: asp.net-mvc optimization strongly-typed-view

我需要一些清晰的思维思维来提供一些好的建议,告诉我们应该如何做到最好。

问题

我正在构建一个Asp.net MVC应用程序。我的大多数视图顶部都有一个工具栏。工具栏上可以有几个不同的项目,如:

  • 按钮
  • 注释
  • 刷新项目(用于将某些按钮放在工具栏最右侧的动态宽度空间)

要遵循 DRY原则,我创建了一组共享部分视图(ToolbarToolbar.Button等),用于呈现预定义的工具栏对象。这些部分视图当然是强类型的。

然后我有我的强类型视图,其模型与它们显示的数据相关。但他们经常也有一个工具栏。所以在调用Html.RenderPartial("Toolbar", toolbar)之前,我必须准备这个IList<ToolbarItemBase>对象列表以将其传递给它。

问题是我在视图中准备这些。此工具栏对象列表对于特定页面始终相同,也是本地化的。工具栏按钮项还具有使用 Url.Action()帮助程序设置的Url属性,这使得无法将序列化工具栏实例简单地存储在数据库中。事情是这些工具栏定义可能变得非常大(想想Word功能区及其中的项目数量)

问题

您有什么建议,我应该在哪里创建我的本地化工具栏实例而不会混淆视图代码?因为它们根本没有变化,所以它们很可能是静态的我猜...

2 个答案:

答案 0 :(得分:1)

我考虑在ASP.NET MVC 3中使用Action / RenderAction助手。

基本上,Action帮助程序允许您为控制器操作设置“子请求”,该操作可以构建模型并呈现局部视图(部分视图的结果将呈现到使用@Html的外部视图中。行动(...))。

所以......在您的场景中,您将拥有一个控制器操作,专门用于构建工具栏的视图模型,并将工具栏部分渲染。使用需要工具栏的布局或内容视图中的Html.Action调用此操作。

希望有所帮助,

答案 1 :(得分:0)

为所有启用工具栏的视图引入基础模型,并在那里准备工具栏数据。

P.S。我可能会因此而被投票,但您是否考虑过回到WebForms而不是MVC?如果您的目的是模仿桌面应用程序界面的所有功能和复杂性,MVC可能不适合您。简而言之,MVC适用于网站,WebForms适用于Web应用程序。