c# - 动态问卷

标签 c# asp.net

我正在尝试使用 ASP.Net 和 C# 制作问卷 这是一个问题列表,根据每个答案会出现另一个问题(例如,这是 X 还是 Y?如果您从单选按钮列表中选择 X,您将得到另一个问题“x 的颜色是什么”,如果您选择 Y“hos”快是 Y")

到目前为止我所做的是我制作了大约 7 个带有单选按钮列表的标签(问题数量),将它们设置为不可见,并且根据第一个问题的答案我使第二个标签和单选按钮列表可见,并更改文本到我想要的问题。

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) 再次被清除和隐藏?!!!

最佳答案

我无法提供这方面的代码,但这是一个可能对您有用的想法。

根据您的描述,我想到了一种数据结构。 。看起来您的问题可以通过将您的问题实现到 Tree 数据结构中来使用面向对象编程来实现。

树中的每个节点都可以有一个唯一的标识符(即 ID),这可以将您的单选按钮与树链接起来。

如果我们有问题A和问题B,并且B依赖于问题A,那么B 问题将是 A 问题的子问题。

因此您可以根据用户的选择通过将每个访问过的节点标记为 Visited 来遍历树,这将帮助您跟踪用户当前正在遵循的“路径”。

这是您的树节点的可能(草稿)结构:

internal class Node
{
   private int ID { get; private set; }
   private string NodeQuestion { public get; public set; }
   private int State { public get; public set; } // 0 for Non-Visited, 1 for Visited
   private Node Left { public get; public set; }
   private Node Right { public get; public set; }

   public Node(...)
   {
     ....
   }
   .
   .
   .
}

关于c# - 动态问卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34776320/

相关文章:

c# - SQL Server - Guid VS。长

c# - 开源最小网络服务器?

javascript - 基本 Ajax POST 发送值在 Controller 中到达 null

c# - 如何覆盖/更新IIS当前正在提供的文件?

c# - 在 C# Web API Web 服务中使用 Process() 调用 GhostScript

c# - 使用 SharedMemory MMF 实现快速 .NET 无锁进程间

C# 排序字母数字列表

c# - 刷新 Treenode parent 以显示最新的子节点

c# - 如何从另一个项目的appsettings文件读取连接字符串

c# - ASP.NET Core + IIS Express 如何设置 SSL 证书