【问题标题】:ASP.NET MVC 2 Dynamic LayoutASP.NET MVC 2 动态布局
【发布时间】:2010-02-09 18:19:16
【问题描述】:

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

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

谢谢, 雅库布

【问题讨论】:

  • 当您说灵活布局时,您是指仅查看和定位还是添加和删除内容?在第一种情况下,你可以用 CSS/Js 和路径做一些事情,否则你必须变得更聪明,管理员会做多少?他们可以像代码一样触摸 HTML(即你会让他们访问你的视图吗?)

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


【解决方案1】:

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")) %>

我个人会采用第一种方法,但除了纯粹主义者的呼声外,我认为第二种方法没有问题。

【讨论】:

  • 假设小部件是有序列表我认为第一个例子是最简单的。
  • 是的,小部件很可能是 IEnumerable 或 ICollection,其小部件具有某种可区分的属性,例如 widget.Region == "Main"
  • 谢谢哈立德!这些是我最初的想法。我想第一个解决方案应该更快,因为每个小部件都不必运行路由管道。
【解决方案2】:

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

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

【讨论】:

  • 谢谢 Dave,我不想使用 JQuery。我将采用第二种解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2018-07-09
  • 1970-01-01
相关资源
最近更新 更多