我已将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"
为什么显示此错误有助于我解决此问题。请
答案 0 :(得分:2)
你的代码(写入)不起作用的原因是因为Repeater嵌套在另外两个服务器控件中:
<li runat="server">
和<ul class="categories" runat="server" id="categorylist">
。 这意味着Repeater与顶级元素位于不同的“命名容器”中,并且无法直接从您的母版页的代码隐藏文件访问。
要解决此问题,您需要
runat="server"
(如果您实际上不需要从服务器端代码访问它们)。这将允许您的代码以现在的方式工作。的 或者, 强> <li>
元素添加ID,然后使用FindControl
方法访问嵌套的Repeater。选项二看起来像这样(我们假设您给<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();
}
您需要使用该代码在需要在代码隐藏中访问它的任何地方“获取”Repeater。