我正在建立一个ASP.NET网站,允许用户创建和接受测试。考试可以包含各种类型的问题(选择题、真/假、作文等)。由于测试的动态特性,我正在使用中继器创建“采取测试”页面。
我现在的问题是:如何才能得到用户的答案?对于固定数量/类型的问题,这很简单,但我不知道如何从具有动态创建ID的项中获取答案,或者如何将可变数量的答案传回我的数据库。
编辑:我找到了答案这里。
发布于 2011-04-07 21:36:43
您可以使用Request.Form
但是,下面是使用FindControl和Repeater的另一种方法:
For Each item As RepeaterItem In Me.RptItems.Items
Dim value = CType(item.FindControl("TxtName"), TextBox).Text
Next您可以将FindControl方法与每个RepeaterItem一起使用,并通过ID在其中找到所需的控制。
ASPX文件:
<asp:Repeater ID="RptItems" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>
Name
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:TextBox ID="TxtName" runat="server" Text='<%# Eval("Name")%>'></asp:TextBox>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater> 发布于 2011-04-07 21:01:26
如果您正在使用Asp.Net MVC,您可以参考本文。模型绑定到集合
如果它的webforms,您始终可以访问通过Request.Form集合提交的每个输入。
发布于 2011-04-09 04:20:58
下面是我根据包括这一个在内的链接为每种问题类型所做的工作。
foreach (RepeaterItem item in myRptr.Items)
{
if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
{
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "myPackage.myProcedure";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("user_id", OracleType.VarChar).Value = Session["UserId"].ToString();
cmd.Parameters.Add("question_id", OracleType.Number).Value = ((HiddenField)item.FindControl("myHidden")).Value;
cmd.Parameters.Add("answer", OracleType.VarChar).Value = ((TextBox)item.FindControl("myTxt")).Text;
cmd.ExecuteNonQuery();
}
}https://stackoverflow.com/questions/5587550
复制相似问题