2016-06-02 6 views
0

У меня есть UpdatePanel с элементом управления Label1 и кнопкой вне его, Button1 и другим элементом управления Label вне UpdatePanel, Label2. Когда кнопка нажата, я хочу, чтобы текст этикетки быть обновлен в Label1:Элементы управления UpdatePanel недоступны - Ссылка на объект не установлена ​​в экземпляр объекта

ASPX страница

<form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" AsyncPostBackTimeout="0" /> 
    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
     </Triggers> 
     <asp:ContentTemplate> 
      <asp:Label ID="Label1" runat="server"></asp:Label> 
     </asp:ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" /> 
    <asp:Label ID="Label2" runat="server"></asp:Label> 
</form> 

Code-Behind

protected void Page_Load(object sender, EventArgs e) 
{ 

} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Label2.Text = "some text"; 
    Label1.Text = "some text"; 
} 

Это должно быть прямо вперед - Я должен обновить текст Label1 с помощью события нажатия кнопки. Линия Label2 преуспевает (очевидно, она не будет отображаться без обратной пересылки страницы), где строка Label1 терпит неудачу: «Ссылка на объект не является экземпляром объекта». Почему Label1 null, когда он находится прямо на странице, только что находится внутри UpdatePanel? Как я должен создавать элементы управления, которые должны быть уже на странице и доступны, как и Label2?

+0

Неверный закрывающий тег 'Label1'. Это просто опечатка? (То же самое для «Label2» кстати) – ConnorsFan

+0

@ConnorsFan Да, исправлено. Пришлось вводить все здесь вручную с другого компьютера. – vapcguy

+0

Можете ли вы удалить 'AsyncPostBackTimeout =" 0 "'? – ConnorsFan

ответ

1

Ваш асинхронный триггер должен быть внутри панель обновления. Возможно, это не так, потому что оно не находится внутри панели обновления. Кроме того, поскольку вы выполняете асинхронную обратную передачу, только обновленная панель обновления будет обновлена; Таким образом, вы, в сущности, «переустановку» Этикетка 1.

Вот почему ваш код позади не может найти Ярлык 1. Сделайте следующее:

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
     </Triggers> 
     <ContentTemplate> 
      <asp:Label ID="Label1" runat="server"></asp:Label> 
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" /> 
      <asp:Label ID="Label3" runat="server"></asp:Label> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:Label ID="Label2" runat="server"></asp:Label> 
</form> 

Это поможет вам увидеть. Ярлыки 1 и 3 всегда будут обновляться, но поскольку метка 2 находится за пределами панели обновления, это не произойдет, потому что страница не увидит это при обратной передаче.

Код За:

protected void Button1_Click(object sender, EventArgs e) 
{ 
     Label3.Text = "label 3"; 
     Label2.Text = "label 2"; 
     Label1.Text = "label 1"; 
} 

Результат:

enter image description here

+0

........... Вау! –

+0

Когда я помещаю кнопку в ContentTemplate панели, она дает мне ошибку: «Элемент управления с идентификатором« Button1 »не найден для триггера в UpdatePanel« UpdatePanel1 ». – vapcguy

+1

Кнопка может находиться за пределами UpdatePanel. Если он включен в список триггеров, он должен вызвать асинхронную обратную передачу. – ConnorsFan

0

<asp:ContentTemplate> код имеет и </asp:ContentTemplate> вместо <ContentTemplate> и </ContentTemplate> теги в UpdatePanel. Я исправил это, и он работает сейчас. Элементы управления стали недоступны, поскольку код не смог найти реальный ContentTemplate или что-то в нем.

+1

И теперь этот ответ имеет противоположную проблему. :-) – ConnorsFan

+0

@ConnorsFan Поймал меня, снова! Исправленный. Длинный день! Благодарю. – vapcguy

+0

Вы можете принять свой собственный ответ, тем более, что другой ответ поднимает голоса, даже если он неправильный (извините, аймайер). – ConnorsFan

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

  • Нет связанных вопросов^_^