0

首先:我不能在我的标题中使用这个词:问题,所以我使用了表单域。

请耐心等待我的问题/解释我已经拥有的与我需要的:

我需要什么:能够从数据库中动态提取第一组问题,然后根据第一组问题的答案进行回答,然后根据第一组问题的答案显示第二组问题(并且根据对第二组问题的答案,将显示不同的第三组)等等(级别数未设置并且是动态的/可以更改)。

我已经拥有:带有类和 SQL DB 后端的 AC# ASP.NET Web 应用程序。表单上的编程需要一组问题,这些问题被分组在一起,并基于传递给表单的分组,它从数据库中提取动态问题(和可能的答案)(可以有许多不同的问题/答案组和表单chagnes 基于该分组的问题)并在屏幕上显示问题。它还提取问题所需的表单字段类型(文本框、选择、复选框、单选等),并动态构建表单字段,并在需要时为选择/复选框/单选选项添加选项,并为表单添加验证。然后,当用户提交表单时,它会将答案保存到数据库中,并且也可以动态检索分析器。

我也有能力/逻辑让问题具有父/子关系(动态的,没有固定级别的父/子关系)。

我需要的是:要能够使用上面的逻辑/数据库结构,但要显示一组问题,然后根据第一组问题的答案,更改显示的第二组问题。

我可以使用 if/else 和 case 语句轻松地对逻辑进行硬编码,但我需要它是动态的,我想从问题/答案中分离出逻辑/代码,这样我就可以轻松地添加/删除/更新问题树而无需更新任何代码只是数据。

例如:所以问题 1、2、3 显示在第一个表格上。用户回答 1:A、2:A、3:B。根据这些答案显示问题 4、5、9。如果他们回答 1:B、2:A、3:C,则显示问题 4、7、9。此外,某些问题的答案可能不会对显示的下一组答案产生影响。此外,我可能有一个问题存储在数据库中,可以出现在一组问题的第 1 级,但嵌套在第二组问题的第 4 级。所有这些都需要从数据库中动态提取。

我已经拥有了我需要的大部分代码/逻辑/功能,我只需要扩展我已经拥有的内容,以允许我想要拥有的这些附加/新功能集。

4

1 回答 1

2

对于一个非常复杂的问题,这可能是一个过于简单化的想法......

创建另一个类似的表

SetLogic         | NextQuestionSet
'1:A, 2:A, 3:B'  | '4,5,9'
'1:B, 2:A, 3:C'  | '4,7,9'

或者

SetLogic         | QuestionId
'1:A, 2:A, 3:B'  | 4
'1:A, 2:A, 3:B'  | 5
'1:A, 2:A, 3:B'  | 9
'1:B, 2:A, 3:C'  | 4
'1:B, 2:A, 3:C'  | 7
'1:B, 2:A, 3:C'  | 9

创建一个发送@SetLogicIn 的存储过程,从新表中选择接下来要问的问题。

这是一个用于拆分表格 NextQuestionSet 的函数,如果您决定朝那个方向发展

CREATE FUNCTION [dbo].[SplitForDelimiter]
(    
      @delimiter VARCHAR(10),
      @input VARCHAR(1000)

)
RETURNS @tempTable TABLE(
data VARCHAR(100)
)
BEGIN

DECLARE @tempstr VARCHAR(1000)
SET @tempstr = @input
WHILE(charindex(@delimiter,@tempstr,0) > 0)
BEGIN
      DECLARE @t VARCHAR(100)
      SET @t = Substring(@tempstr,0,(charindex(@delimiter,@tempstr,0)))
      INSERT into @tempTable (data) VALUES (@t)
      SET @tempstr = Substring(@tempstr,charindex(@delimiter,@tempstr,0)+1,Len(@tempstr))
      if(charindex(@delimiter,@tempstr,0) <=0)
      BEGIN
      INSERT into @tempTable (data) VALUES (@tempstr)
      END
END
于 2018-03-22T22:26:15.853 回答