Несколько одинаковых форм на странице в asp.net. Как мне получить переменные?

У меня проблемы с выяснением этого. Я не могу объяснить это так хорошо, так что сначала немного html/asp:

<%for(int i=0; i<getCountRows(); i++)
    {
        setLabelsFestivals(i);
%>
    <form action="festival_details.aspx" method="post">
        <table id="table_600px_border">
            <tbody class="content_table_left" style='padding: 10px;'>
                <tr>
                    <td class="content_table_300px content_table_left_up">
                        <div class="text_bold">
                            <asp:Label ID="nameFestival" runat="server"></asp:Label>
                        </div>
                        <asp:HiddenField ID="fest_id" runat="server" />
                    </td>
                    <td class="content_table_300px content_table_left_up_bottom">
                        <asp:Label ID="startDateFestival" runat="server"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td class="content_table_left_up">
                        <asp:Label ID="locationFestival" runat="server"></asp:Label>
                    </td>
                    <td class="content_table_left_up">
                        <asp:Label ID="endDateFestival" runat="server"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td class="content_table_left_up_bottom">
                        <asp:HyperLink ID="urlFestival" runat="server">Site</asp:HyperLink>
                    </td>
                    <td class="content_table_right_bottom">
                    <input type="submit" name="btnDetails" value="Details" />
                    </td>
                </tr>
            </tbody>
        </table>
    </form>
<% }

Для каждой строки в наборе данных форма динамически создается с помощью простой кнопки отправки. Это то, что происходит в коде позади

//This method makes sure that the correct labels are shown on the screen
protected void setLabelsFestivals(int positionDataSet)
{
    //Checking if data is found for bands
    if (getCountRows() > 0)
    {
        DateTime dtStartDate = Convert.ToDateTime(dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_datum"].ToString());
        DateTime dtEndDate = Convert.ToDateTime(dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_einddatum"].ToString());

        //Showing all festivals and its data
        nameFestival.Text = dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_naam"].ToString();
        fest_id.Value = dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_id"].ToString();
        startDateFestival.Text = "Begindatum: " + dtStartDate.ToString("yyyy-MM-dd");
        locationFestival.Text = "Locatie: " + dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_locatie"].ToString();
        endDateFestival.Text = "Einddatum: " + dtEndDate.ToString("yyyy-MM-dd");
        urlFestival.NavigateUrl = "http://" + dataSetFestivals.Tables[0].Rows[positionDataSet]["fest_url"].ToString();
        urlFestival.Target = "_blank";
    }
}

Итак, как я могу, например, получить значение скрытого идентификатора ширины поля "fest_id" в festival_details.aspx? Вот что я попробовал:

HttpContext variables = HttpContext.Current;
strFormIdFest = variables.Request["fest_id"];

Однако String strFormIdFest всегда имеет значение null. Я думаю, это как-то связано с clientId?

1 ответ

Решение

Во-первых, веб-формы asp.net предназначены для использования только одной формы на страницу. Вам следует рассмотреть возможность использования элемента управления, например повторителя, для визуализации элементов управления в той же форме.

Так или иначе. Если вы просматриваете (используя точку останова и быстрый просмотр) переменные запроса, вы сможете найти скрытое поле. Но он не назван "fest_id", он получил другое имя, содержащее имя страницы и элемента управления, а также несколько других символов. Это способ по умолчанию для всех элементов управления asp.net (например, asp:HiddenField).

Вы можете заставить asp.net присвоить элементу управления свой идентификатор, если вы используете asp.net 4.0, установив для ClientIDMode значение Static:

<asp:HiddenField ID="fest_id" runat="server" ClientIDMode="Static" />

Или вы можете использовать стандартный скрытый элемент управления html, чтобы получить правильный идентификатор, но вы не можете использовать код для установки значения в этом случае:

 <input type="hidden" name="fest_id" id="fest_id">

Вы должны рассмотреть, является ли цикл for в вашем aspx подходящим способом. Это не стандартный путь в веб-формах. Посмотрите на повторитель или другой элемент управления для визуализации сложной разметки.

Другие вопросы по тегам