2013-05-09 28 views
0

我很難搞清楚這一點。我無法解釋這是很好的,所以這裏的一些HTML/ASP第一:在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"; 
    } 
} 

所以,我怎麼能夠例如獲得festival_details.aspx隱藏字段寬度ID「fest_id」的價值? 這是我的嘗試:

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

但是,字符串strFormIdFest總是空。 我想這與clientId有關係嗎?

回答

1

首先,asp.net webforms被設計爲每頁僅使用一種形式。您應該考慮使用像中繼器這樣的控件來將您的控件呈現在同一個表單中。不管怎樣,如果你正在尋找(使用斷點和快速監視)你的請求變量,你應該能夠找到隱藏的字段。但它沒有命名爲「fest_id」,它獲得了包含頁面和控件名稱以及一堆其他字符的另一個名稱。這是所有asp.net控件(如asp:HiddenField)的默認方式。

您可以強制asp.net給控制你的ID,如果您正在使用asp.net 4.0通過設置的ClientIDMode爲靜態:

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

或者你可以使用標準的HTML隱藏控制,以獲得正確的ID,但你不能使用後面的代碼在這種情況下設置的值:

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

你應該考慮如果在你的ASPX循環是要走的路。它不是webforms的標準方式。看看中繼器或其他控件來渲染複雜的標記。

+0

非常清晰和詳細。謝謝。我已經設法使用clientId用於我的目的,但我會研究你正在談論的那個中繼器;) – DerpyNerd 2013-05-09 21:03:12

相關問題