Как получить пользовательский ввод из динамически созданной формы - PullRequest
1 голос
/ 08 апреля 2011

Я создаю веб-сайт ASP.NET, который позволяет пользователям создавать и проходить тесты.Тесты могут содержать различные типы вопросов (множественный выбор, истина / ложь, эссе и т. Д.).Из-за динамического характера тестов я создаю страницу «Пройти тест» с повторителями.

Моя проблема сейчас: как я могу получить ответы пользователя?С фиксированным числом / типом вопросов это было бы просто, но я не уверен, как получить ответы из элементов с динамически создаваемыми идентификаторами или как передать переменное количество ответов обратно в мою базу данных.

Редактировать: Я нашел свой ответ здесь.

Ответы [ 3 ]

1 голос
/ 08 апреля 2011

Вы можете использовать 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> 
0 голосов
/ 09 апреля 2011

Вот что я сделал для каждого типа вопроса, основываясь на ссылках, включая , этот .

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();
            }
        }
0 голосов
/ 08 апреля 2011

Если вы используете Asp.Net MVC, вы можете ссылаться на эту статью. Модель Bind To Collection

Если его веб-формы, вы всегда можете получить доступ к каждому из входных данных, представленных через коллекцию Request.Form.

...