如何在ASP.NET中构建灵活的Web表单

sco*_*ena 6 asp.net webforms

我正在使用asp.net,我需要构建一个应用程序,我们可以轻松创建表单而无需重新创建数据库,最好不要更改创建/读取/更新/删除查询.目标是允许客户创建自己的表单,包括下拉列表,文本框,复选框,甚至是与另一个简单表单(即拉伸它)的多对一关系.用户不必自己创建表单,但每次请求/修改新表单时,我都不希望添加表,字段,查询,网页等.

2个问题:1)如何构建一个灵活的数据库来执行此操作(在SQL Server中)?我可以想到两种方法:a)为每种数据类型(int,varchar(x),smalldatetime,bit等)创建一个表.这将很难创建足够的查询.b)创建包含大量额外字段和各种数据类型的表单表,以防用户需要5个整数或5个日期字段.这似乎是最简单的,但可能使用空间非常低效.

2)我如何建立表格?我考虑创建一个包含验证,数据类型,显示控件等的xml工作表作为列表.然后我将通过xml解析来动态构建表单.可能使用css来进行布局(必须是手动的,这没关系).

有更好/最好的方式吗?那里有什么我可以看到的想法吗?任何帮助深表感谢.

Tim*_*ora 3

这听起来像是 InfoPath 解决方案的潜在候选者。乍一看,它会完成您所要求的大部分/全部任务。

本文简要概述了创建基于 SQL 数据源的 InfoPath 表单。

http://office.microsoft.com/en-us/infopath-help/design-a-form-template-based-on-a-microsoft-sql-server-database-HP010086639.aspx

我已经构建了一个完全自定义的解决方案,就像您所描述的那样,如果我再次这样做,我可能会选择 1) 第三方产品或 2) 较少的功能。您可以将 90% 的时间花在 10% 的功能集上。

编辑:重读您的问题,这里是额外的反馈。

1 - 灵活的数据结构:需要记住的几件事是性能和根据数据编写报告的能力。数据结构越通用,实现这些就越困难(再次,从经验来看)。

与性能和报告就绪性有些相反的是,Microsoft SharePoint 在通用表中使用 XML 片段/文档以获得最大的灵活性。我无法否认 SharePoint 的功能,因此这确实完成了工作并极大地简化了数据结构。如果正确完成,XML 将表现良好,但大多数人会发现针对 XML 编写查询更加困难。尽管 XML 是 SQL Server 的“一等公民”,但它的性能可能与优化的表结构一样好,也可能不那么好。

2 - 表单:我使用 XSLT 转换的 XML 实现了自定义表单。XML 通常是存储表单结构的不错选择;XSLT 本身就是一个怪物,但它非常强大。无论如何,InfoPath 将其表单结构存储为 XML。

我还使用 .Net 中的自定义控件实现了动态表单。这是一种非常面向对象的方法,但是(取决于 UI 的复杂性)可能需要大量代码。

最后(再次以 SharePoint 为例),Microsoft 在 SharePoint 2007 中实现了极其复杂的 XML 列表/表单定义。这种复杂性抵消了许多好处。换句话说,如果您采用 XML 路线,请使您的结构干净、简单,否则您将面临维护噩梦。

编辑 #2:参考下面 Scott 的问题,这里有一个高级数据结构,可以避免重复数据,并且大部分表单定义不依赖 XML。

警告:我只是将这个设计放在 SQL Management Studio 中......我只花了 10 分钟;开发灵活的表单系统并不是一项简单的任务,因此这是一个过于简单化的情况。它不涉及用户输入数据的存储,仅涉及表单的定义。

替代文本

表格:

表单 - 顶级表单表,其中包含(正如您所猜测的)构成表单的字段集合。

字段 - 可以跨表单重用的通用字段。例如,您不希望 50 个不同的表单有 50 个不同的“姓氏”字段。请注意“DataTypeId”列。您可以在此列中存储所需的任何类型,例如“数字”、“自由文本”,甚至是指示用户应从列表中选择的值。

FormField - 允许表单在其定义中包含 0-多个字段。您甚至可以扩展此表以指示用户可以根据需要添加任意数量的此字段。

约束 - 基本上是一个定义约束类型的查找表(可能是最大长度、最大出现次数、必需的等)

FormFieldConstraint - 将约束与表单字段的特定实例相关联。该表将特定表单与具有特定约束的特定字段组合在一起。注意元数据列;这可能是 XML 存储约束细节的一个很好的用途。

本质上,我建议构建一个具有很少或没有空值且没有重复数据的规范化数据库。我所描述的结构将帮助您走上实现这一目标的道路。