快速 Web 应用程序开发





4.00/5 (5投票s)
2005 年 4 月 1 日
10分钟阅读

206527

4191
一篇关于 Multiformity 开源项目(Multiformity Open Source project)的文章。
引言
Multiformity 引擎包含易于配置的控件,并满足了许多连接到数据库的 Web 应用程序的常见需求。它自动提供了添加、编辑和读取数据的功能,还包括集成的帮助、树形视图和调度控件以及许多其他功能。
注意:代码已转换为 ASP.NET 2.0 :D。
此工具集旨在让您的开发团队专注于项目的“火箭科学”,而不是日常繁琐的应用程序细节。下面是该系统固有功能的一些屏幕截图:
集成树形视图
编辑/添加表单生成
漂亮的网格控件
特点
Multiformity 引擎当前支持(注意:这不是完整列表,写下来太长了):
- 新增 通过过滤一次编辑或删除多行。
- 新增 标签式编辑表单现在只需通过标准编辑表单配置数据库中的字段即可完成。
- 新增 集成安全功能已完成。通过标准 Web 界面,您可以创建用户组,指定用户是否有权查看或编辑数据库中的任何表或字段。它还支持组继承。
- 新增 添加了
MultiListbox
控件,用于长多选列表框,还可以对数据进行排序。 - 流程自动化允许将这些控件组合在一起,以程序化的方式执行。通过很少或有时根本不需要额外的编码和重新编译,您可以构建流程来向客户列表发送电子邮件、从库存中创建销售并记录付款,或更新中央服务器。
- 新增 树形视图现在是一个控件,而不是四个框架页的集合。
- 新增 数据库命中次数减少了 75% 以上,CPU 使用率降低了 50%。调试时有时需要杀死 ASPNet_wp 进程;)
- 新增
UserInformation
对象存储与用户相关的所有数据,并且可以自动访问继承了 BasePage.cs 的任何页面。 - 修复了 FireFox 中的外观和感觉。
- 检测到数据库表之间的一对多关系,并自动提供新功能。
- 正则表达式验证,无需重新编译代码。
- 增强的网格对象,无需任何设置即可支持排序、分页和过滤。
- 表单对象,给定数据库中的表名和一个可选的行标识符,将自动生成适当的添加或编辑表单,所有这些都具有可自定义的选项卡顺序、上下文帮助、工具提示和内置验证。表单甚至会将相似的控件(复选框、日期等)分组在一起。
- 集成帮助,面向管理员、开发人员以及最终应用程序。所有这些都通过标准 Web 界面进行维护。
- 易于使用的类库,可让您的开发人员和图形设计师分离表单和功能,并实现原始 HTML 与标准代码隐藏文件之间的无缝集成。
- 还有太多其他功能无法一一列举。有 60 多个类,包括 14 个自定义控件,丰富的 SQL 工具,以及所有这些控件的默认实现。
Multiformity 引擎优于您普通网格控件或数据绑定文本框的一个特性是它们之间是相互关联的。例如,Grid
控件显示链接,这些链接指向显示记录查看器或表单等其他控件的页面。网格控件还使用表单对象来实现其自身的过滤功能;树形视图使用记录查看器来显示行内容。此外,这些较大的控件还使用较小、较简单的“表单”控件,这些控件也引用较大的控件。继续阅读以获取当前可用控件的部分列表:
Control | 描述 |
---|---|
ProcessViewer |
显示流程的当前步骤,以及返回到任何先前步骤的方法。此控件是流程自动化框架的一部分,该框架使开发人员能够快速地将许多这些组件和其他自定义组件组合在一起,以系统化步骤完成任务。 |
树视图 |
TreeView 控件显示数据库中的表,这些表具有一对多关系,从而实现树形视图概念。例如,集成帮助系统利用树形视图控件在左侧显示帮助主题,在右侧显示主题内容。这也可以用于按制造商、颜色或许多其他因素分组显示库存中的项目。 |
表单 |
用于向数据库添加或编辑数据。它包含适合情况的所有添加/更新、取消和删除按钮。 |
Grid |
Grid 对象除了显示要访问数据的用户和用户希望查看的表之外,不需要做任何其他事情。它会自动过滤、排序和分页,同时保持状态。包含指向所有适当的编辑/添加表单和其他有用链接的链接。 |
PropertiesEditor |
编辑扩展名为 .properties 的文本文件,其中包含由等号分隔的名称值对。此工具集的设计目的是无需更新代码和重新编译即可进行许多次要的和一些主要的自定义。通过 Web 站点在服务器上编辑各种属性可以轻松实现许多这些目标。 |
RecordViewer |
查看数据记录,展开任何大型文本字段以便在页面上完整阅读。 |
Button |
Button 实际上是一个占位符,上面有一个按钮、链接或图像,它可以简单地有一个重定向到的链接,或者一个分配给其单击事件的处理程序。 |
日历 |
包含三个控件:默认的 Calendar 控件、一个按钮和一个文本框。按钮将隐藏和/或显示日历控件,单击日历中的日期会将选定的日期放入文本框中。 |
CheckBox |
使用 JavaScript 和图像实现复选框的“真/假/默认”功能。 |
DropDown |
包含一个下拉列表和一个按钮。单击按钮将打开默认的网格,显示链接的表。 |
MultiSelect |
包含两个多选下拉列表,带有“移动一个”或“移动所有”按钮,可将源列表移动到选定的目标列表。此控件已绑定到数据,并将其结果保存到数据库中,格式为逗号分隔的列表。 |
文本框 |
提供基本的绑定到数据的文本框。 |
除了这些功能之外,Multiformity 还易于使用和设置。我们建议您在尝试使用这些工具处理现有数据库之前,仔细阅读 readme 和其他文档,因为我们有一个命名约定,可以启用“默认”设置。您不必使用我们的命名约定,但否则需要更多的设置。
使用代码
使用代码非常简单,并且包含了任何开发人员在其自定义项目中都需要考虑的许多细节。绝对路径到系统目录、DSN 字符串和其他类似项确实需要配置,我将在以下部分详细介绍。
有关如何使用该代码的完整信息,您可以阅读源 zip 文件(multiformity.chm)中包含的文档。简要介绍基础知识,请看:
在页面上显示网格
using System.Web.UI.WebControls;
using rasp.Components.HTML.PageControls;
//Note that the page must implement the BasePage class.
public class Display : rasp.Components.BasePage {
...
//Find the placeholder or any other control
//that you wish to put the grid on:
PlaceHolder ph = (PlaceHolder)FindControl("Grid");
//Create the grid object, giving the constructor
//a reference to the page that the
//control will be displayed on, and a
//UserInformation object that is maintained
//by a basepage object that the page
//inherits from. Any required information is
//automatically retrieved off of the querystring
//object by the grid itself, although
//the grid object can take a parameterized list
//in the constructor to specify the table
//in the database that that you wish the grid
//to bind to and other information.
Grid wc = new Grid(this, this.UserInformation);
//Add the control and you are done!
ph.Controls.Add(wc.TheGrid);
您可能会注意到这里只有六行代码,其余的都是注释...
显示编辑表单
using System.Web.UI.WebControls;
using rasp.Components.HTML.PageControls;
//Note that the page must implement the BasePage class
public class Edit : rasp.Components.BasePage {
...
//Get the control to hold the form.
PlaceHolder EditForm = (PlaceHolder)FindControl("EditForm");
//Get a form object, providing the page
//that will contain the form, and
//the userinformation maintained by
//the basepage. Again the details of
//the form are accessed from the pages
//querystring, but you can provide
//a prameterized list to the constructor
//to give it a table which you will
//be adding a row to or adding to
//it a possible row ID to edit a row instead
//of add.
Form f = new Form(this, this.UserInformation);
//The form does not actually sort and
//generate the HTML until you tell it
//that you are ready for the current
//implementation of the form object.
//This is done so that you can dynamically
//change things on the form before
//it is generated.
EditForm.Controls.Add(f.RecordEditor);
大多数其他控件都与此类似,但我不会对此进行详细说明,但再次强调,显示编辑表单只需六行代码,这一点很重要。
现在,让我们看看如何做一些真正酷的事情。我创建的表单控件会自动生成数据绑定控件,它还会自动为您排序控件并将它们放置在选项卡上,但有时您可能需要为特定表(如果不是所有表)显示“自定义”编辑或添加表单。这是经典的“将表单与控件分离”情况,您有网页设计师设计页面的外观和感觉,但对如何以编程方式创建数据绑定控件知之甚少。为此,我提供了另一个继承自 BasePage
类的类,该类会自动找到放置控件的位置。借助这种架构,网页设计师只需放置 <asp:placeholder>
标签,这些标签会指定要从数据库中获取的控件。我将在稍后改进这个概念,但现在,它是这样工作的:
ASPX 页面
<%@ Page language="c#" Codebehind="EditRow.aspx.cs"
AutoEventWireup="false" Inherits="EditRow.cs" %>
<HTML>
<HEAD>
<title>EditField</title>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="EditField" method="post" runat="server">
<table>
<tr><td>
<asp:PlaceHolder ID=Form_Name Runat="server" />
</td><td>
<asp:PlaceHolder ID=Form_Caption Runat="server" />
</td></tr>
<tr><td>
<asp:PlaceHolder ID="Form_Submit_Button" Runat="server" />
</td></tr>
</table>
</form>
</body>
</HTML>
请注意,这里的占位符 ID 是字段名,前面加上“Form_”,就这么简单!
代码隐藏文件
...
//Note that this inherits the FormPage class that inherits from BasePage.
public class EditRow : FormPage {
...
private void Page_Load(object sender, System.EventArgs e) {
//Set the name of the table that will be edited or added to
this._Adapter = "TableName";
//Put the controls on the page.
this.PopulateControls(this);
}
...
相关基类(FormPage.cs)在这里有些难以详细解释,但我将简单说明它有一个受保护的 _Adapter
字符串成员,并根据该成员确定放置 ASPX 文件中占位符 ID 指定的所需控件的位置。
这样,编辑页面就可以由网页设计师而不是 Web 开发人员创建。
安装
下载中包含的文件
- multiformity_src.zip - 将源代码解压缩到位于 wwwroot 文件夹中的一个文件夹。确切位置不重要,因为本地路径是在运行时确定的。在 IIS 配置管理器中,确保解压缩的文件夹(我们假设是 c:\inetpub\wwwroot\rasp)被配置为自己的应用程序,并且您的 ASPNET 用户对其及其所有子文件夹拥有完全控制权。接下来,在 c:\inetpub\wwwroot\rasp 中查找一个名为 constants.properties 的文件。在该文件中,您需要输入 DSN 字符串以及站点的基本 URL。Multiformity 引擎在程序代码中引用绝对 URL,因此您必须确保为其他人使用网站中的链接配置了正确的基本 URL。
注意:此 Zip 文件中还有一个名为 RaspDocs 的文件夹,其中包含有关系统工作原理的更多详细信息;尽管它们仍在开发中,但它们将阐明管道和其他功能的组织方式。
- multiformity_Data.zip - 将数据库 Zip 文件解压缩到您选择的目录,然后将两个 DB 文件附加到您的 SQL Server(如果您使用 MSDE,则需要从命令提示符执行此操作,但还有其他在线文档对此进行了说明)。
- multiformity_Images.zip - 将此文件解压缩到您的网站根目录,目前这是必需的。您应该能够通过相对路径“/images/image.gif”引用这些图像。
关注点
数据绑定 HTML 控件的动态创建是一个很少(甚至没有)书籍或在线参考资料涵盖的主题。但是我在此主题上学到了很多,并计划在以后有时间时写下我的发现,所以请关注那些文章!您可以发送电子邮件至 Multiformity@austin.rr.com 以获取我文章的当前状态,因为我计划在不久的将来撰写许多文章!
历史
这是 Multiformity 引擎的第二个版本,进一步的开发取决于社区,所以请捐款,您将获得十倍的回报!
Multiformity 引擎的图标是由 Ace Icons(Can Do Software 的一个部门)慷慨捐赠的。它们是您所有图标和图形需求的一站式服务。请支持我们的合作伙伴并购买一套图标,以保持 Multiformity 在您的项目中的外观和感觉的一致性。
Multiformity 是一个开源项目。我们欢迎社区愿意分享的任何反馈和新代码,但这不是必需的。此工具集是在 GNU 公共许可证下发布的,这意味着您可以在任何公共或私人项目中使用它。我们确实感谢任何可以合并回源代码的改进……分享爱;)。再次,由于图标是捐赠的,请注意这一点,并在您有任何图形需求时使用 Ace Icons。我将此项目发布为开源的原因是因为它现在对我来说太多了,无法一次性处理。