2015-12-05 6 views
0

У меня есть ретранслятор на стр. A, в котором его ItemTemplate содержит LinkButton с PostBackUrl = page 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

Я просто использовать его на других страницах. Но это не работает. Вот мой код: Код

Repeater в странице 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 > 

метод OnClick сюда на LinkButton в странице A:

protected void onclickbtn (object sender, EventArgs e) 
     { 

      LinkButton btn = (LinkButton)sender; 
      btn.ID = "itemPointer"; 
     } 

Это код Onload события для страницы B:

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. Итак, я просто удалил свойство PostBackUrl LinkButton и использовал Server.Transfer в обработчике OnClickLinkButton.

Теперь он работает.

Спасибо.

Смежные вопросы