我们使用类似的模型构建了一套应用程序。
我们有一个所谓的PageBuilder,它通过注入UserControls和WebParts来构建每个页面。
一切都是可配置的(页面布局,页面控件,控制位置等),所以没有必要更改页面,用户控件或任何的WebParts代码。 (除非需要添加/更改某些功能)。
我们甚至有控制内配置和设置取决于像SQL查询模式,当前页面等
Basicly它是这样工作的各种事情来改变自己的行为:
- 创建布局表为当前页面。
- 获取UserControls和WebParts以显示。
- 将每个UserControl和WebPart放在正确的位置。
- 将设置应用于每个UserControl和WebPart。
所有WebParts都可以通过自定义发布者/订阅者事件模型相互通信。即在WebPart A中更改下拉选择=> WebPart B显示所选项目的数据。
该模型允许我们构建高度可配置的应用程序,客户可以设计布局和行为,而不需要我们参与。
您的模型似乎是我们模型的一个子集,我只能说这很容易处理。无论是从开发者角度还是从客户角度来看。
编辑:
Basicly我们的框架包含了一下母版页和基页它调用PageBuilder的。
每个主页面用于不同类型的对象:页面,用户控件,Web部件,灯箱等。
每个aspx页面包含用于UserControls和WebParts的PlaceHolder。这个PlaceHolder由PageBuilder填充。
我们的aspx页面中的UserControl/WebPart PlaceHolder可以填充任何我们想要的控件。所以不需要改变aspx页面。如果我们想要一个文本框,我们可以配置它。自定义UserControl或WebPart也是如此。通过这种方式,我们不需要为每个自定义应用程序重新创建aspx页面,但只需要更改配置。
我们有100多个用户控件,并为的WebParts各种aspx页面,但大多数aspx页面类似于:
<%@ Page MasterPageFile="main.master" ... %>
<asp:Content runat="server" ContentPlaceHolderID="Main" ID="MainSection">
<asp:PlaceHolder runat="server ID="UserControlPlaceHolder"></asp:PlaceHolder>
</asp:Content>
在代码隐藏
,我们有这样的:
Partial Class MyPageClass Inherits BasePage
Protected Sub Page_Init(ByVal sender As Object, ByVal e as System.EventArgs) Handles Me.Init
'The following method is in the BasePage and is part of the PageBuilder.
LoadControls()
End Sub
End Class
的PageBuilder创建布局然后加载并添加所有控件和WebParts在正确的位置。
(布局,其控制和控制位置都从配置中获取)。
然后,PageBuilder将应用每个Control和WebPart的设置。这些设置也是可配置的。设置可以像控件的高度或“显示模式”(静态,页面依赖,组依赖等)这样的更复杂的事情一样简单。
希望这可以更详细地解释它。
我其实不想在每个自定义应用程序中重新创建新页面。您的“框架”是否允许使用例如文本框丰富aspx页面而不需要修改它?它是否是PageBuilder的角色?谁称之为Builder?你能提供一些细节吗? – Thierry 2009-11-20 08:12:20