编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

asp:Repeater嵌套调用提示上下文不存在

    asp:Repeater的嵌套,主要是想实现导航的下拉菜单功能,类似以下效果

js下拉菜单特效

    前台代码


<li>
	<a href="#"><%#DataBinder.Eval(Container.DataItem,"title")%><b></b></a> 
	<ul class="subnav">
		<li>
			<a href="#"><%#DataBinder.Eval(Container.DataItem,"title")%></a> 
		</li>
	</ul></li>


    后台代码

public void rptNav_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rpColumnNews = (Repeater)e.Item.FindControl("rptNav",2);
//找到分类Repeater关联的数据项
DataRowView rowv = (DataRowView)e.Item.DataItem;
//提取分类ID
int pId = Convert.ToInt32(rowv["id"].ToString(),2);
BLL.category bll = new BLL.category(,2);
DataTable dt = bll.GetList(pId, 1,2);
Repeater rptNavSub = (Repeater)e.Item.FindControl("rptNavSub",2);
rptNavSub.DataSource = dt;
rptNavSub.DataBind(,2);
dt.Dispose(,2);
}
}

    如果在后台代码中直接使用rptNavSub.DataSource的话,编译的时候会出现错误提示:rptNavSub上下文不存在

    如果要让rptNavSub绑定数据,必须Repeater rptNavSub = (Repeater)e.Item.FindControl("rptNavSub",2);

    嵌套之后页面就不止1个rptNavSub,所以其实嵌套的Repeater的ID实际上是后生成的,并不是我们指定的Repeater。

未经允许不得转载: 技术文章 » .NET编程 » asp:Repeater嵌套调用提示上下文不存在