2

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"

このエラーが表示される理由は、これを解決するのに役立ちます。お願いします

4

1 に答える 1

2

あなたのコード (書かれたとおり) が機能しない理由は、Repeater が他の 2 つのサーバー コントロール内にネストされているためです。

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

これは、Repeater が最上位の要素とは異なる "ネーミング コンテナー" にあり、マスターページの分離コード ファイルから直接アクセスできないことを意味します。

これを修正するには、次のいずれかを行う必要があります

  1. これらのコントロールから削除runat="server"します (サーバー側のコードから実際にアクセスする必要がない場合)。これにより、コードが現在のように機能するようになります。 または、
  2. <li>要素にID を追加し、FindControlメソッドを使用してネストされた Repeater にアクセスします。

オプション 2 は次のようになります ( <li>ID に「categoryItem」を指定したと仮定します)。

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();
}

そのコードを使用して、コードビハインドでアクセスする必要がある場所でリピーターを「取得」する必要があります。

于 2013-08-07T13:02:31.643 に答える