2013-08-07 40 views
1

我已經加載我的HTML模板到我的母版頁,然後將類別綁定到數據庫。 我已經使用這種編碼。在母版頁內的無序列表中找到一箇中繼器?

<ul class="categories"> 
      <li id="categoryItem"> 
       <h4>Categories</h4> 
       <ul class="categories" id="categorylist">    
        <asp:Repeater ID="repCategories" runat="server"> 
         <HeaderTemplate><ul></HeaderTemplate> 
         <ItemTemplate> 
          <li> 
          <asp:HyperLink ID="hyperCategories" runat="server"><%#Eval("CategoryName")%></asp:HyperLink> 
          </li> 
         </ItemTemplate> 
         <FooterTemplate></ul></FooterTemplate> 
        </asp:Repeater> 
       </ul> 
      </li> 

並嘗試通過在master.cs頁面上編碼來將此中繼器綁定到我的數據庫。

if (!IsPostBack) 
     { 
      DataSet ds = new ViewAction().GetAllProductCategoryData(); 
      repCategories.DataSource = ds; 
      repCategories.DataBind(); 
     } 

但它表明

"The name repCategories does not exist in the current context"

爲什麼它顯示這個錯誤幫我解決這個錯誤。請

回答

2

你的代碼(如寫入)不工作的原因,是因爲中繼器嵌套在2個其他服務器控件:

  • <li runat="server">
  • <ul class="categories" runat="server" id="categorylist">

這意味着Repeater與您的頂級元素位於不同的「命名容器」中,並且不能直接從您的masterpage的代碼隱藏文件訪問。

要解決這個問題,你需要或者

  1. 從這些控件刪除runat="server"(如果你實際上並不需要從服務器端代碼訪問它們)。這將允許您的代碼按照現在的方式工作。 或者,
  2. 添加一個ID爲<li>元素,然後用FindControl方法來訪問你的嵌套Repeater。

第二個辦法會是這個樣子(我們假設你給<li>的「categoryItem」的ID):

if (!IsPostBack) 
{ 
    // Get the Repeater from nested controls first 
    Repeater repCategories = (Repeater)categoryItem.FindControl("categorylist").FindControl("repCategories"); 
    // Do the rest of your work 
    DataSet ds = new ViewAction().GetAllProductCategoryData(); 
    repCategories.DataSource = ds; 
    repCategories.DataBind(); 
} 

您需要使用該代碼爲「獲得」直放站您需要在代碼隱藏中訪問它的任何地方。

+0

刪除,但仍然是錯誤 – VJain

+0

@VJain你沒有顯示你的整個主頁標記。除了顯示的內容外,是否還有其他'runat =「server」'控件?另外,您是否可以確認此C#代碼位於masterpage.aspx.cs文件中?我想確保我正確地閱讀你的問題。 – jadarnel27

+0

沒有先生,實際上現在它顯示錯誤categoryItem – VJain

相關問題