如何从动态创建的表单中获取用户输入

发布于 2024-10-30 18:50:17 字数 350 浏览 4 评论 0原文

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

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

编辑: 我在此处找到了答案。

I am building an ASP.NET website that allows users to create and take tests. Tests can contain various types of questions (multiple choice, true/false, essay, etc.). Because of the dynamic nature of the tests, I am creating the "Take Test" page with repeaters.

My problem now is: how can I get the user's answers? With a fixed number/type of questions this would be simple, but I'm not sure how to grab answers from items with dynamically created IDs or how to pass a variable number of answers back to my database.

Edit:
I found my answer here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你另情深 2024-11-06 18:50:17

您可以使用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> 

You can use Request.Form

But Here is Another approach using FindControl and Repeater:

    For Each item As RepeaterItem In Me.RptItems.Items

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

    Next

you can use FindControl method with each RepeaterItem and find desired control inside it by ID.

ASPX file:

<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> 
单挑你×的.吻 2024-11-06 18:50:17

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

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

If you are using Asp.Net MVC you can reference this article. Model Bind To Collection

If its webforms you can always access each of the inputs submitted via the Request.Form collection.

韬韬不绝 2024-11-06 18:50:17

这是我最终对每种问题类型所做的事情,基于包括 这个

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();
            }
        }

Here is what I ended up doing for each question type, based on links including this one.

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();
            }
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文