随机显示每页加载三个不同的问题

时间:2013-04-09 13:34:41

标签: c# asp.net sql sql-server checkbox

我不知道从哪里开始,寻找正确的方向。我正在使用C#。我需要向用户显示三个问题,但是我需要随机选择并在每个页面加载时显示这些问题。如果您的解决方案认为它是最简单的方法,我可以使用MS SQL。

我有一个10个问题的列表,我希望一次显示三个问题并随机选择它们。做这个的最好方式是什么?

目前设置如下..

enter image description here

   <p> <label class="checkbox"><asp:CheckBox ID="QuesChk1" Value="1" Text="What street do they live on?"
        runat="server" /></label></p>
     <p> <label class="checkbox"><asp:CheckBox ID="QuesChk2" Value="2" Text="What is their middle name?"
        runat="server" /></label></p>
     <p> <label class="checkbox"><asp:CheckBox ID="QuesChk3" Value="3" Text="What branch do they visit the most?"
        runat="server" /></label></p>
    <asp:Button ID="Button1" OnClick="Next_Click" runat="server" Text="Next" />

6 个答案:

答案 0 :(得分:2)

您可以随时执行以下操作:

SELECT TOP 3 * FROM QuestionsTable ORDER BY NEWID()

请点击此处查看有关工作原理的说明:"order by newid()" - how does it work?

答案 1 :(得分:0)

使用随机排序的SQL查询:

SELECT * FROM QuestionsTable ORDER BY RAND() LIMIT 3

答案 2 :(得分:0)

听起来像Random或许你正在寻找的东西。特别是,您应该查看Random.Next(int maxValue)方法。

如果我必须做这样的事情,我会收集一些问题,并使用上面提到的功能来获取随机问题。但是,您必须通过选择相同的问题来解决问题。

答案 3 :(得分:0)

如果您不想使用数据库并且已修复所有10个问题,请使用viewstate

之类的东西
ViewState["Questions"] = new List<string>();

并向其添加问题

然后还有一个查看状态来检查您获得的订单是否不是最后一个订单

ViewState["LastOrder"] = new List<int>(){1,2,3};

然后生成随机订单,直到它不是最后一个

int firstIndex, secondIndex, thirdIndex;
var lastOrder = (List<int>)ViewState["LastOrder"];

Random r = new Random(lastOrder[0] + lastOrder[1] + lastOrder[2]);

while(firstIndex == lastOrder[0]) 
   firstIndex = r.Next(1, 10);

while(secondIndex == lastOrder[1] || secondIndex == firstIndex) 
   secondIndex = r.Next(1, 10);

while(thirdIndex == lastOrder[2] || thirdIndex == firstIndex || thirdIndex == secondIndex)    
   thirdIndex = r.Next(1, 10);

// update current index as last index
ViewState["LastOrder"] = new List<int>(){firstIndex, secondIndex, thirdIndex};

在此之后,您将获得随机不重复的三个问题顺序

答案 4 :(得分:0)

如果您没有太多问题,并且它们将保持静态,那么安装整个数据库可能会有点过分。

您可以在字符串上使用ArrayList(或者包含ID和字符串的更复杂的对象)并使用随机函数三次来选择3个不同的元素。

当然,您必须验证您没有选择相同的问题。

你做的事情取决于你是否想要存储答案。

答案 5 :(得分:0)

如果您非常关注获得3个随机不重复的问题,那么您可以尝试:

在你有问题的SQL表中,你必须有一个ID字段,如果没有,那么创建一个,现在因为你有10个问题,ID将在1-10之间。

现在在c#代码中,您可以创建将获得的方法:

Random random = new Random();
int randomNumber = random.Next(1, 10);

现在构建一个SQL查询“Select * from tab where ID = randomNumer”(对于第一个问题)。

将randomNumber存储在临时数组或列表中(用于比较目的)并再次调用相同的方法并将其与现有数字进行比较(您可以通过使用返回bool的Contains()方法简单地执行此操作)不相似然后将其添加到数组并继续发布此问题。

你必须跟踪数组/列表大小(如果&lt; 3然后继续退出)。

这必须为您锻炼,我已经为使用相同算法的公司创建了入学考试,遗憾的是无法找到代码。

祝你好运