asp.net 找不到控件。

前台代码:<tablewidth="500"border="0"cellpadding="0"cellspacing="1"bgcolor="#CCCCCC"class=... 前台代码:

<table width="500" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC" class="list">
<asp:Repeater ID="rptGoodsType" runat="server" onitemcommand="rptGoodsType_ItemCommand">

<HeaderTemplate>
<tr>
<th height="40">商品类别名称</th>
<th>操作</th>
</tr>
</HeaderTemplate>

<ItemTemplate>
<tr>
<td><%# Eval("goodsTypeName") %></td>
<td>
<asp:Button ID="UpdateButton" runat="server" CommandName="Update" Text="更新" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="取消" />
</td>
</tr>
</ItemTemplate>

<FooterTemplate>
<tr>
<td>

<asp:HyperLink ID="prevPage" runat="server">上一页</asp:HyperLink>
<asp:HyperLink ID="nextPage" runat="server">下一页</asp:HyperLink>
<asp:Label ID="lblCurrentPage" runat="server"></asp:Label>

</td>
</tr>
</FooterTemplate>

</asp:Repeater>

</table>

后台代码:
protected void Page_Load(object sender, EventArgs e)
{
DataAccess myData = new DataAccess();
DataSet ds = myData.GetAllGoodsType();//自己定义的,值已经获取到了

PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = ds.Tables[0].DefaultView;
objPds.AllowPaging = true;
objPds.PageSize = 5;

int CurPage;

//当前页面从Page查询参数获取

if (Request.QueryString["Page"] != null)
CurPage=Convert.ToInt32(Request.QueryString["Page"]);
else
CurPage=1;

objPds.CurrentPageIndex = CurPage-1;

lblCurrentPage.Text = "Page: " + CurPage.ToString();

if (!objPds.IsFirstPage)
{
prevPage.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage - 1);

}

if (!objPds.IsLastPage)
{
nextPage.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1);
}

//把PagedDataSource 对象赋给Repeater控件
rptGoodsType.DataSource=objPds;
rptGoodsType.DataBind();

}

protected void rptGoodsType_ItemCommand(object source, RepeaterCommandEventArgs e)
{

}

救救我吧:

编译器错误消息: CS0103: 当前上下文中不存在名称“lblCurrentPage”

编译器错误消息: CS0103: 当前上下文中不存在名称“prevPage”

编译器错误消息: CS0103: 当前上下文中不存在名称“nextPage”

把这三项注释了就好使,或者把这3个控件不放在 FooterTemplate里就好使,为什么FooterTemplate里的控件获取不到?
我确实是粘贴过来的代码。 怎么切换都不好使。
展开
 我来答
百度网友1214fdcbb
2010-11-23 · TA获得超过1240个赞
知道小有建树答主
回答量:316
采纳率:0%
帮助的人:379万
展开全部
测试了一下,就给楼主说说第一个上一页,因为另外两个都是同样的道理:
<asp:HyperLink ID="prevPage" runat="server">上一页</asp:HyperLink>
的输出ID:
1,使用母版页,然后放在 <FooterTemplate>里面,他的ID变成:
ctl00_rptGoodsType_ctl11_prevPage
2,不适用母版页,然后放在 <FooterTemplate>里面,他的ID变成:
rptGoodsType_ctl11_prevPage
换句话说,不管他使用不使用母版页,他只要在<FooterTemplate>里面,他就不是单独的个体了,就变成是repeater的一部分了。
下面的代码可以帮你找到他:
string strvalue = string.Empty;

foreach (RepeaterItem item in rptGoodsType.Controls)
{
if (item.ItemType == ListItemType.Footer)
{
HyperLink hy = (HyperLink)item.FindControl("prevPage");
if (hy != null)
strvalue += "Footer:" + hy.ID;

}
}
marser_clark
2010-11-23 · TA获得超过257个赞
知道小有建树答主
回答量:314
采纳率:0%
帮助的人:139万
展开全部
“把这三项注释了就好使,或者把这3个控件不放在 FooterTemplate里就好使,为什么FooterTemplate里的控件获取不到?”,如果实在不行,建议楼主就不要把这3个控件放到FooterTemplate这个里面了,毕竟那3项只是“脚部”的显示,完全可以重新放在另外一个table里面。看下面的代码:
<asp:Repeater ID=“rptGoodsType” runat=“server” onitemcommand=“rptGoodsType_ItemCommand”>

<HeaderTemplate>
<table width=“500” border=“0” cellpadding=“0” cellspacing=“1” bgcolor=“#CCCCCC” class=“list”>
<tr>
<th height=“40”>商品类别名称</th>
<th>操作</th>
</tr>
</HeaderTemplate>

<ItemTemplate>
<tr>
<td><%# Eval(“goodsTypeName”) %></td>
<td>
<asp:Button ID=“UpdateButton” runat=“server” CommandName=“Update” Text=“更新” />
<asp:Button ID=“CancelButton” runat=“server” CommandName=“Cancel” Text=“取消” />
</td>
</tr>
</ItemTemplate>

<FooterTemplate>

</table>
</FooterTemplate>

</asp:Repeater>
<table>
<tr>
<td>
<asp:HyperLink ID=“prevPage” runat=“server”>上一页</asp:HyperLink>
<asp:HyperLink ID=“nextPage” runat=“server”>下一页</asp:HyperLink>
<asp:Label ID=“lblCurrentPage” runat=“server”></asp:Label>
</td>
</tr>
</table>
没数据时,可以根据需求是否隐藏脚部代码。在一个楼主注意Repeater里面table的放置。像楼主那样放,在没有数据时,也会显示一个table(多余的)。
“放在foot之外好使,但我真想知道为什么获取不到。”控件也是一个类,放在foot里面的时候i,可能.net没有自动创建这个类,放在外面的时候,可能.net自动创建了这个类。如果楼主的.net可以创建“asp.net web 应用程序”,即创建一个页面会有3个相应的文件,例如:Default.aspx,Default.aspx.cs,Default.aspx.designer.cs,其中在Default.aspx.designer.cs这个文件里面创建了相应的控件,如果这里面有,则可以this到,如果没有,则this不到。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yiwei124
2010-11-23 · TA获得超过1197个赞
知道小有建树答主
回答量:1187
采纳率:0%
帮助的人:353万
展开全部
在aspx的最上面,有一行这样的代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
其中CodeFile是该页面对应的cs文件名,Inherits是文件里面的类名,如果你连这句都粘贴过来的话,那么记得要把这个地方改掉,或者只粘贴除了这行以外的代码,新建一个页面,再试试,祝成功。
如果还是不能解决这个问题,可以给我发百度消息!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友89578bfea
2010-11-23 · TA获得超过317个赞
知道小有建树答主
回答量:456
采纳率:0%
帮助的人:311万
展开全部
如果控件放在另一个控件(Repeater)的模板里面,不能直接访问,而要用
var lb = (Label)
rptGoodsType.FindControl("lblCurrentPage");
这样的方式访问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
XCExceXCExce
2010-11-23 · TA获得超过647个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:336万
展开全部
LZ,其实可以找到。是在 protected void rptGoodsType_ItemCommand(object source, RepeaterCommandEventArgs e)这个方法中,而且需要
<FooterTemplate>
<asp:HyperLink ID="prevPage" runat="server">上一页</asp:HyperLink>
<asp:HyperLink ID="nextPage" runat="server">下一页</asp:HyperLink>
<asp:Label ID="lblCurrentPage" runat="server"></asp:Label>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="a">LinkButton</asp:LinkButton>//这个是为了触发事件
</FooterTemplate>
protected void rptGoodsType_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "a")
{
Label lb = (Label)e.Item.FindControl("lblCurrentPage");
lb.Text = "gg";
}
}
这样是可以找到的。我只说了思路,具体的你自己整整吧(估计要改好多代码),当然也可以像楼上的写在另一个table里(比较简单,我比较推荐)。

——————————————————————————
我使用了母板页,var lb = (Label)rptGoodsType.FindControl("lblCurrentPage");之后不报错(因为这里的lb为null,是不会出错的),但lb.Text="123";报错(这里肯定会出错),让我使用 new 关键字。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
开发者之路
2010-11-23 · TA获得超过910个赞
知道大有可为答主
回答量:2031
采纳率:0%
帮助的人:934万
展开全部
有时asp.net会出现这样问题
建议,你再新建一个空页面(名字命名一样),再把前台内容考进去,运行,再把后台代码考进去,就可以了.

参考资料: http://www.bjzero.net

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(10)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式