我在页面A中有一个转发器,其ItemTemplate
包含LinkButton
,其中PostBackUrl =第B页。此外,它还包含一个隐藏字段,该字段取自与datasource
关联的值转发器。我想从页面B访问此隐藏字段。在页面A中,当单击LinkButton
时,sender
对象将转换为LinkButton
,然后访问LinkButton
的实例在页面B的加载事件中,我使用NamingContainer
来了解单击了哪个转发器项并检索其中隐藏字段的值。我在这里找到了这个方法:
我只是跨页面使用它。但它没有用。这是我的代码:
第A页中的转发器代码:
<asp:Repeater ID="postsRepeater" runat="server" DataSourceID="postsSource">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton runat="server" ID="commentsLink" OnClick="viewPost" CssClass="comments_profile_buttons" PostBackUrl="~/comments.aspx">
<asp:HiddenField ID="psotId" runat="server" Value='<%#Eval("postId") %>' />
//other controls...
</ItemTemplate>
</Repeater >
页面A中LinkButton
的Onclick方法:
protected void onclickbtn (object sender, EventArgs e)
{
LinkButton btn = (LinkButton)sender;
btn.ID = "itemPointer";
}
这是第B页的Onload
事件代码:
protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null)
{
//retrieve the clicked post info:
//First access the clicked item in the repeater:
LinkButton senderbtn = (LinkButton) PreviousPage.FindControl("btn");
RepeaterItem clickedItem = (RepeaterItem)senderbtn.NamingContainer;
HiddenField postIdHidden = (HiddenField)clickedItem.FindControl("psotId");
}//end if
这是我得到的错误:
System.NullReferenceException: Object reference not set to an instance of an object.
由此行引起:RepeaterItem clickedItem = (RepeaterItem)senderbtn.NamingContainer;
我认为检索到的ButtonLink
为空,但我无法弄清楚原因。
任何人都可以告诉我,我做了什么错误?
谢谢。
答案 0 :(得分:0)
我明白了,错误是因为你不能在不使用PreviousPage
的情况下使用Server.Transfer
属性。所以,我刚刚删除了LinkButton的PostBackUrl属性,并在Server.Transfer
的{{1}}处理程序中使用了OnClick
。
它现在正在工作。
感谢。