发布可变数据

时间:2011-08-16 16:52:16

标签: asp.net sql-server asp.net-mvc-3

我正在ASP.NET,C#,MVC3和SQL Server 2008中构建应用程序。

将表格呈现给用户以填写(姓名,电子邮件,地址等)。我想允许应用程序的管理员在此表单中添加额外的动态问题。

额外问题的数量和返回的数据类型会有所不同。例如,管理员可以添加0,1个或更多以下类型的问题:

  1. 你有一个完整,干净的驾驶乐趣吗?
  2. 将您的驾驶技能从1分为5分。
  3. 描述您上一次长途旅行的时间?
  4. 等...
  5. 请注意,提供的答案可能是二进制(Q.1),整数(Q.2)或自由文本(Q.3)。

    如何允许从表单中将0,1个或更多随机值发布回我的代码?

    任何帮助都会非常适合。

    提前致谢。

    PS。我问了一个关于在sql中存储这些数据的类似问题,请参阅here

4 个答案:

答案 0 :(得分:1)

您需要使用EAV方案进行存储。有关该主题的讨论,以及常见的陷阱和解决方案,请参阅Best Practices for Semantic Data Modeling for Performance and Scalability。其他选择是Sparse ColumnsXML data type列,但我认为EAV在大多数情况下都是优越的。

答案 1 :(得分:0)

您必须使用动态控件来完成此操作。

基本上,您将从数据库中读取问题列表,注入零个或多个自定义控件以发出问题并接受答案。可能包裹在转发器中。

在回发后,你必须重新水化动态控件,以便你可以获得值。

答案 2 :(得分:0)

在我使用调查工具之前,我已经完成了这项工作。

首先,您需要确定您将拥有哪些类型的问题。我有SingleOption,MultiOption和FreeText类型的问题。

用户登录管理界面屏幕并选择他想要添加的问题类型。然后,他单击“添加”按钮,该按钮向控制器/ Web服务提交请求。

Controller查看问题类型并将记录添加到数据库中。

下面的粗糙表结构:

QuestionID | SurveyId | QuestionTypeId 2 4 1

这是你的基本结构。

当您生成用于回答问题的界面时,您将使用SurveyId = 4检索所有问题。

然后,您将编写一个HTML帮助程序,查看问题类型并生成适当的控件。

在提交调查或问题答案时,您会在某个div中显示所有问题和答案字段,比如我们称之为“survey_questions”。在这个div中将包含一个表格,其中包含您的所有问题和答案控件(文本输入,复选框等)。

然后,您将通过jQuery将此表单提交给控制器/ Web服务。 Controller / Web Service将读取调查ID,它将遍历所有提交的值。

然后,您将使用这些值填充表格以存储调查结果。我知道这是非常简短和抽象的,但我已经工作了一个多月,所以如果这很有用,你需要进一步的帮助,那么请问。

答案 3 :(得分:0)

我发现了一篇很好的文章解决了我的问题。 你可以找到它here