2015-12-05 161 views
0
另一頁

一箇中繼器內我在頁面A中的中繼器,其其ItemTemplate包含一項PostBackUrl =頁B.一個LinkButton此外,它包含一個隱藏字段這需要從與中繼器相關聯的datasource其值。我想從頁面B訪問這個隱藏的字段。在頁面A中,當單擊LinkButton時,sender對象被轉換爲LinkButton,然後在頁面B的加載事件中訪問LinkButton的實例,其中我使用NamingContainer來知道哪個中繼器項目被點擊並檢索隱藏字段的值。我在這裏找到了這個方法:訪問控制從

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

我只是用它跨頁。但它不起作用。這裏是我的代碼:

直放站代碼頁答:

<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 > 

的onclick方法來回回在網頁A的LinkButton

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

我想通了,錯誤是因爲你不能使用PreviousPage屬性而不使用Server.Transfer。所以,我剛剛刪除了LinkBut​​ton的PostBackUrl屬性,並在LinkButtonOnClick處理程序中使用了Server.Transfer

現在工作。

謝謝。