具有不同表单字段的动态表单,其中下一组表单字段根据对当前表单字段答案集的答案而更改
Dynamic form with different form fields with logic where next set of form fields changes based off answer to current set of form field answers
首先:我不能在我的标题中使用这个词:问题,所以我使用了表单字段。
请耐心等待我 question/explanation 我已经拥有的与我需要的:
我需要的是:能够从数据库中动态提取第一组问题,然后回答,然后根据第一组问题的答案显示第二组问题,这些问题根据以下问题的答案而变化第一组问题(根据第二组问题的答案,将显示不同的第三组问题)等等(级别数未设置,正在 dynamic/can 更改)。
我已经拥有:一个 C# ASP.NET Web 应用程序,带有 类 和一个 SQL 数据库后端。表单上的编程采用一组问题,这些问题被组合在一起,并根据传递给表单的分组从数据库中提取动态问题(和可能的答案)(可以有许多不同的 question/answer groupins 和表格根据该分组更改问题)并在屏幕上显示问题。它还提取问题所需的表单字段类型(文本框、select、复选框、单选框等)并动态构建表单字段,如果需要,select/checkbox/radio 的选项还添加验证到表格。然后,当用户提交表单时,它会将答案保存到数据库中,并且还可以动态检索答案。
我也有 ability/logic 让问题具有 parent/child 关系(动态的,没有设置级别的 parent/child 关系)。
我需要的是:要能够使用上面的 logic/db 结构,但要显示一组问题,然后根据第一组问题的答案,更改第二组问题被显示。
我可以使用 if/else 和 case 语句轻松地对逻辑进行硬编码,但我需要它是动态的,我想将 logic/code 与 questions/answers 分开,这样我就可以轻松 add/remove/update 问题树,无需更新任何代码,仅更新数据。
例:所以问题1、2、3显示在第一个表格上。用户回答 1:A、2:A、3:B。根据这些答案显示问题 4、5、9。如果他们回答 1:B、2:A、3:C,则会显示问题 4、7、9。此外,一些问题的答案可能不会对显示的下一组答案产生影响。此外,我可能在数据库中存储了 1 个问题,这些问题可以出现在一组问题的第 1 级,但嵌套在第二组问题的第 4 级。这一切都需要从数据库中动态拉取。
我已经拥有我需要的大部分 code/logic/functionality,我只需要扩展我已经拥有的功能,以允许我想要拥有的这组 additinal/new 功能。
对于一个非常复杂的问题,这可能是一个过于简单的想法...
创建另一个 table 类似于此
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
创建一个存储过程,从新的 table 发送 @SetLogicIn,select 你接下来想问什么问题。
这是一个函数,用于拆分 table 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
首先:我不能在我的标题中使用这个词:问题,所以我使用了表单字段。
请耐心等待我 question/explanation 我已经拥有的与我需要的:
我需要的是:能够从数据库中动态提取第一组问题,然后回答,然后根据第一组问题的答案显示第二组问题,这些问题根据以下问题的答案而变化第一组问题(根据第二组问题的答案,将显示不同的第三组问题)等等(级别数未设置,正在 dynamic/can 更改)。
我已经拥有:一个 C# ASP.NET Web 应用程序,带有 类 和一个 SQL 数据库后端。表单上的编程采用一组问题,这些问题被组合在一起,并根据传递给表单的分组从数据库中提取动态问题(和可能的答案)(可以有许多不同的 question/answer groupins 和表格根据该分组更改问题)并在屏幕上显示问题。它还提取问题所需的表单字段类型(文本框、select、复选框、单选框等)并动态构建表单字段,如果需要,select/checkbox/radio 的选项还添加验证到表格。然后,当用户提交表单时,它会将答案保存到数据库中,并且还可以动态检索答案。
我也有 ability/logic 让问题具有 parent/child 关系(动态的,没有设置级别的 parent/child 关系)。
我需要的是:要能够使用上面的 logic/db 结构,但要显示一组问题,然后根据第一组问题的答案,更改第二组问题被显示。
我可以使用 if/else 和 case 语句轻松地对逻辑进行硬编码,但我需要它是动态的,我想将 logic/code 与 questions/answers 分开,这样我就可以轻松 add/remove/update 问题树,无需更新任何代码,仅更新数据。
例:所以问题1、2、3显示在第一个表格上。用户回答 1:A、2:A、3:B。根据这些答案显示问题 4、5、9。如果他们回答 1:B、2:A、3:C,则会显示问题 4、7、9。此外,一些问题的答案可能不会对显示的下一组答案产生影响。此外,我可能在数据库中存储了 1 个问题,这些问题可以出现在一组问题的第 1 级,但嵌套在第二组问题的第 4 级。这一切都需要从数据库中动态拉取。
我已经拥有我需要的大部分 code/logic/functionality,我只需要扩展我已经拥有的功能,以允许我想要拥有的这组 additinal/new 功能。
对于一个非常复杂的问题,这可能是一个过于简单的想法...
创建另一个 table 类似于此
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
创建一个存储过程,从新的 table 发送 @SetLogicIn,select 你接下来想问什么问题。
这是一个函数,用于拆分 table 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