2013-05-09 8 views
0

У меня возникли проблемы с этим. Я не могу это объяснить, что хорошо, так что здесь некоторые HTML/жерех первый:Несколько идентичных форм на странице в asp.net. Как получить переменные?

<%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"]; 

Однако строка strFormIdFest всегда нуль. Я предполагаю, что это как-то связано с clientId?

ответ

1

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

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

Вы можете заставить ASP.NET дать контролировать свой идентификатор, если вы используете ASP.NET 4.0, установив ClientIDMode Статический:

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

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

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

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

+0

Очень ясно и подробно. Благодарю. Мне уже удалось использовать clientId для моей цели, но я буду смотреть на этот ретранслятор, о котором вы говорите;) – DerpyNerd