- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 asp.net,我需要构建一个应用程序,我们可以在其中轻松创建表单而无需重新创建数据库,最好不要更改创建/读取/更新/删除查询。目标是允许客户创建自己的表单,包括下拉菜单、文本框、复选框,甚至是与另一个简单表单的多对一关系(即拉伸(stretch)它)。用户不必自己创建表单,但我不想在每次请求/修改新表单时添加表、字段、查询、网页等。
2个问题:
1)我如何构建一个灵活的数据库来做到这一点(在 SQL Server 中)?我可以想到两种方法:a) 为每种数据类型(int、varchar(x)、smalldatetime、bit 等)创建一个表。这将很难创建足够的查询。 b) 创建包含大量额外字段和各种数据类型的表单表,以防用户需要 5 个整数或 5 个日期字段。这似乎是最简单的,但可能对空间的使用效率很低。
2) 我如何建立表格?我考虑创建一个 xml 表,其中包含验证、数据类型、要显示的控件等作为列表。然后我会解析 xml 以动态构建表单。可能使用 css 进行布局(这必须是手动的,这没关系)。
有没有更好/最好的方法?有什么东西可以让我得到想法吗?任何帮助深表感谢。
最佳答案
这听起来像是 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 片段/文档以获得最大的灵 active 。我无法与 SharePoint 的功能争论,所以这确实完成了工作并大大简化了数据结构。如果正确完成,XML 将表现良好,但大多数人会发现编写针对 XML 的查询更加困难。尽管 XML 是 SQL Server 的“一等公民”,但它的性能可能会或可能不会像优化的表结构一样好。
2 - 表格:我已经使用由 XSLT 转换的 XML 实现了自定义表单。 XML 通常是存储表单结构的好选择; XSLT 本身就是一个怪物,但它是 很强大。值得一提的是,InfoPath 将其表单结构存储为 XML。
我还使用 .Net 中的自定义控件实现了动态表单。这是一种非常面向对象的方法,但是(取决于 UI 的复杂性)可能需要大量代码。
最后(再次以 SharePoint 为例),Microsoft 在 SharePoint 2007 中实现了极其复杂的 XML 列表/表单定义。复杂性抵消了许多好处。换句话说,如果你走 XML 路线,让你的结构简洁明了,否则你将面临维护的噩梦。
编辑#2:引用下面斯科特的问题,这是一个高级数据结构,它将避免重复数据并且不依赖于大多数表单定义的 XML。
警告:我只是把这个设计放在 SQL Management Studio 中……我只花了 10 分钟;开发一个灵活的表单系统不是一件容易的事,所以这是一个过度简化。它不解决用户输入数据的存储,只是表单的定义。
表格:
表单 - 顶级表单表,其中包含(如您所料)组成表单的字段集合。
字段 - 可以跨表单重用的通用字段。例如,您不希望 50 个不同的表单有 50 个不同的“姓氏”字段。请注意“DataTypeId”列。您可以在此列中存储您想要的任何类型,例如“数字”、“自由文本”,甚至是指示用户应该从列表中选择的值。
FormField - 允许表单在其定义中包含 0 个字段。您甚至可以扩展此表以指示用户可以根据需要添加尽可能多的此字段。
约束 - 基本上是一个定义约束类型的查找表(可能是最大长度、最大出现次数、必需等)
FormFieldConstraint - 将约束与表单字段的特定实例相关联。此表将特定表单与具有特定约束的特定字段组合在一起。注意元数据列;这可能是 XML 存储约束细节的一个很好的用途。
本质上,我建议构建一个规范化的数据库,其中包含很少或没有空值且没有重复数据。我所描述的结构将使您走上实现该目标的道路。
关于asp.net - 如何在 ASP.NET 中构建灵活的 Web 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4432296/
我有以下几行代码: using XXX.PAD.PaidServices; using YYY= XXX.PAD.PaidServices.Judet; //// uncomment below fo
我正在寻找一种方法,让 LAN 中的客户端无需任何配置即可找到我的服务器应用程序的所有实例。我不想自己破解某些东西,而是想使用现有的解决方案。就个人而言,我需要用 Python 完成它,但我很乐意听到
我的“问题”或“挑战”有很多问题。但它们都不符合我的需求。好的,我开始了: 我想要一个保存可变属性的数据库。现在我将它们作为列名“硬编码”到数据库中(参见图片)。请参阅“颜色”和“尺寸”。但是如果我想
我正在为我的一个 friend 创建一个网站。我们得到了这些布局,我已经放了一个灵活的背景,可以缩放到当前的浏览器大小。但是放置在背景上的图标需要在缩放窗口时保持相对位置。意味着如果我调整窗口大小,让
案例 通常,您会使用 cellForRowAtIndexPath 委托(delegate)方法来设置单元格。单元格的信息集对于单元格的绘制方式和大小非常重要。 不幸的是,heightForRowAtI
我试图让下面的 div 变得灵活 div { min-width: 500px; max-width: 1000px; width:100%; height: 400px; margin-left:1
我在单元测试方面遇到问题。当我运行测试时,它以 "No tests found" 结束。我正在使用 AppCode 和 Quick/Nimble 框架进行单元测试,但它在 XCode 中也不起作用。
问之前,请理解我的英语不好。 我在 servlet 编程中使用 Class.forName(...) 类。当我访问 servlet 时,我从数据库中获得一行详细的 Controller 信息,指示要使
我创建了一个cron job在 GAE 灵活环境中,每 15 分钟自动运行一次。 但是在创建每个实例时,是否会为每个实例复制相同的 cron 作业?我对此不太确定。 最佳答案 不,不会为每个实例复制
div A 灵活且固定(位于窗口顶部),具有高 z-index,因此下方的元素可以在滚动时从下方通过。 div B 位于 div A 下方,我希望它“粘”在 div A 的底部,因为在调整窗口大小时高
我是 Quick/Nimble 的新手,所以我尝试了一个简单的单元测试: import Quick import Nimble class DarkSkyTests: QuickSpec {
我创建了一个演示。关于表格单元格的灵 active ,我需要一些帮助。 我有一些表格单元格,它们的宽度应该是固定的。 但单元格由标签组成,标签可以是长文本,也可以是短文本。 基于此标签,表格单元格应该
我非常熟悉在代码中需要“水平带”的网站 - 即使他们的内容固定在 960 像素以内,他们的背景也会向左和向右“延伸”。 我知道如何做这些,如果它们只有一种颜色,或者我可以用作背景的一张图片。 最近一位
我在自己编写的网站(无框架或 CMS)上使用 Cloudflare Flexible SSL。一切正常,现在我想在整个网站上使用 HTTPS。我在 Apache Web 服务器上使用 PHP。 我想知
我有这个 Java 接口(interface): public interface Box { public void open(); public void close(); } 这个接
所以我有一个“主要”功能系统,现在可以作为 CMS 使用:用户进入编辑器并从四个模板中选择一个。在模板中,他们单击可以添加图像、文本或两者的部分。 我有一个预览屏幕,可以向他们展示他们正在制作的东西,
下面的 HTML/CSS/Javascript (jQuery) 代码显示了 #makes 选择框。选择一个选项会显示带有相关选项的 #models 选择框。 #makes 选择框偏离中心,#mode
我正在使用固定高度的图像来填充具有渐变颜色的 div,方法如下:背景:透明 url(green_bg.gif) repeat-x scroll 0 0; 但是它只填充一个等于图像高度的高度。根据其中的
我的系统的 GUI 在 1366 X 768 分辨率下运行良好。当它以不同的分辨率显示时,我需要并排滚动,而它不应该这样。此外,当我尝试在 chrome 中按 ctr+- 时,div 和部分变得困惑。
我正在尝试在 google app engine 灵活环境中使用 python 编写日志。 我想使用默认的 python 日志记录库并使用处理程序进行日志记录。这是我的代码: import loggi
我是一名优秀的程序员,十分优秀!