1

我正在构建一个允许用户创建和参加测试的 ASP.NET 网站。测试可以包含各种类型的问题(多项选择、真/假、论文等)。由于测试的动态特性,我正在创建带有中继器的“Take Test”页面。

我现在的问题是:我怎样才能得到用户的答案?对于固定数量/类型的问题,这很简单,但我不确定如何从具有动态创建的 ID 的项目中获取答案,或者如何将可变数量的答案传递回我的数据库。

编辑: 我在这里找到了答案。

4

3 回答 3

1

您可以使用 Request.Form

但这是另一种使用 FindControl 和 Repeater 的方法:

    For Each item As RepeaterItem In Me.RptItems.Items

        Dim value = CType(item.FindControl("TxtName"), TextBox).Text

    Next

您可以对每个 RepeaterItem 使用 FindControl 方法,并通过 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-07T21:36:43.587 回答
0

如果您使用的是 Asp.Net MVC,您可以参考这篇文章。模型绑定到集合

如果它的网络表单,您始终可以访问通过 Request.Form 集合提交的每个输入。

于 2011-04-07T21:01:26.530 回答
0

这是我最终针对每种问题类型所做的,基于包括这个的链接。

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();
            }
        }
于 2011-04-09T04:20:58.553 回答