我正在尝试使用ASP.Net和C#进行调查问卷 它是一个问题列表,并根据每个答案出现另一个问题(例如,这个X或Y?如果你从单选按钮列表中选择X,你会得到另一个问题“x的颜色是什么”,如果你选择Y“hos快是Y“)
我到目前为止所做的是我制作了大约7个带有radiobutton列表的标签(问题数量),将它们设置为不可见,并根据第一个问题的答案,我将第二个标签和单选按钮列表可见,并更改文字到我想要的问题。
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e) //first question
{
//selected value =0 => No || selected value= 1 => Yes
if (RadioButtonList1.SelectedValue == "1")
{
Label1.Visible = true;
Label1.Text = "Question number 2 based on answer a"; //show the second question
RadioButtonList2.Visible = true; //show the second question options
}
else {
Label1.Text = "Question number 2 based on answer b";
Label1.Visible = true; //show the second question
RadioButtonList2.Visible = true; //show the second question options
}
}
protected void RadioButtonList2_SelectedIndexChanged(object sender, EventArgs e) //2nd question
{
if (RadioButtonList1.SelectedValue == "1" && RadioButtonList2.SelectedValue == "1") //1st question answer was yes &2nd is yes
{
//some logic here
}
到目前为止,这种逻辑工作得很好,但有没有比这更简洁的逻辑呢?
例如,在回答第7个问题然后我在问题编号4中进行了修改后,如何将已回答的问题(5,6,7)清除并再次隐藏?!!!
答案 0 :(得分:1)
我无法提供有关此问题的代码,但您可能认为这些代码很有用。
根据您的描述,我想到了一个数据结构。 Tree
。看起来您的问题可以通过将问题实现到Tree
数据结构中使用面向对象编程来实现。
树中的每个节点都可以有一个唯一的标识符(即ID),这样就可以将你的单选按钮与树链接起来。
如果我们有问题A
和问题B
,并且B
取决于问题A
,那么B
问题将是{{1}的孩子1}}问题。
因此,您可以根据用户选择遍历树,方法是将每个访问节点标记为A
,这将帮助您跟踪用户当前关注的“路径”。
以下是Tree节点的可能(草稿)结构:
Visited