У меня есть ретранслятор на стр. A, в котором его ItemTemplate
содержит LinkButton
с PostBackUrl = page B. Также он содержит скрытое поле, которое принимает свое значение от datasource
, связанного с повторителем. Я хочу получить доступ к этому скрытому полю со страницы B. На странице A при нажатии на LinkButton
объект sender
преобразуется в LinkButton
, тогда экземпляр LinkButton
доступен в событии загрузки страницы B, где я использовал NamingContainer
, чтобы узнать, какой ретранслятор элемент был нажат и извлек значение скрытого поля в нем. Я нашел этот метод здесь:Доступ к элементам управления внутри ретранслятора с другой страницы
Я просто использовать его на других страницах. Но это не работает. Вот мой код: Код
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
имеет нулевое значение, но я не мог понять, почему.
Может кто-нибудь, пожалуйста, скажите мне, в чем была ошибка?
спасибо.