ASP.NET MVC 2动态布局

时间:2010-02-09 18:19:16

标签: asp.net asp.net-mvc asp.net-mvc-2

你们如何在ASP.NET MVC 2中创建动态布局,管理员可以选择要显示的窗口小部件,排列它们,禁用它们,移动它们等等?我的意思是灵活的布局,可以通过管理面板进行更改,而无需触摸代码。在这里,我考虑在db中定义和存储布局小部件路径。稍后我可以将这些小部件与路由相关联(在db中)。对于每个请求(控制器,操作),我将获取相关小部件之间的布局并递归输出它们。可能我可以为此使用RenderAction和PartialViews。

我的方向是正确还是应该专注于其他技术?

谢谢, 的Jakub

2 个答案:

答案 0 :(得分:2)

Rob Conery用他的Kona重写做了类似的事情。他能够在页面中创建区域,然后将小部件与这些区域相关联。

有两种方法可以想到:

1。)首先是在控制器操作中加载所有小部件以及它们保存的内容。然后将小部件的所有信息(在模型中)发送到您的视图并在那里进行过滤。这样可以保留视图和控制器之间的分离。您可能想要创建一个辅助方法:

<% Html.RenderWidgets("Main", Model.Widgets) %>

<% Html.RenderWidgets("SideBar", Model.Widgets) %>

关于第一种方法的一点说明。您可能希望为小部件设置某种命名约定,这样您就可以更轻松地找到它们的部分视图。

2.)另一种方法是使用RenderAction并调用一个可以传递区域名称的“RegionController”。传递区域名称将触发对属于该特定区域的所有小部件的查询。

 <% Html.RenderAction<RegionController>(x=>x.Widgets("Main")) %>

 <% Html.RenderAction<RegionController>(x=>x.Widgets("SideBar")) %>

我个人会采用第一种方法,但除了纯粹主义者的呼喊之外,我没有看到第二种方法存在问题。

答案 1 :(得分:1)

如果您想要小部件的交互式拖放,请使用jQuery或ExtJS。 ExtJS有一个完整的portal example

如果您不想使用javascript,则需要滚动自定义解决方案,其中定义了区域并使用动态加载的部分视图填充。