我已将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"
为什么它会显示这个错误帮助我解决这个问题。请
发布于 2013-08-07 13:02:31
您的代码(编写的)无法工作的原因是,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。
https://stackoverflow.com/questions/18103739
复制相似问题