从另一页

时间:2015-12-05 10:10:05

标签: c# asp.net repeater pageload linkbutton

我在页面A中有一个转发器,其ItemTemplate包含LinkButton,其中PostBackUrl =第B页。此外,它还包含一个隐藏字段,该字段取自与datasource关联的值转发器。我想从页面B访问此隐藏字段。在页面A中,当单击LinkButton时,sender对象将转换为LinkButton,然后访问LinkButton的实例在页面B的加载事件中,我使用NamingContainer来了解单击了哪个转发器项并检索其中隐藏字段的值。我在这里找到了这个方法:

http://aspadvice.com/blogs/joteke/archive/2007/02/25/Understanding-the-naming-container-hierarchy-of-ASP.NET-databound-controls.aspx

我只是跨页面使用它。但它没有用。这是我的代码:

第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为空,但我无法弄清楚原因。

任何人都可以告诉我,我做了什么错误?

谢谢。

1 个答案:

答案 0 :(得分:0)

我明白了,错误是因为你不能在不使用PreviousPage的情况下使用Server.Transfer属性。所以,我刚刚删除了LinkBut​​ton的PostBackUrl属性,并在Server.Transfer的{​​{1}}处理程序中使用了OnClick

它现在正在工作。

感谢。