2016-06-02 7 views
0

LabelPanel에 LabelParameter가 있고 그 밖에 Button1이 있고 UpdatePanel, Label2 외부에 다른 Label 컨트롤이 있습니다. 버튼을 클릭하면, 나는 레이블 텍스트가 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> 

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이 페이지에있을 때 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는 업데이트 패널 외부에 있으므로 다시 게시 할 때 페이지에이 태그가 표시되지 않기 때문에 레이블 2와 3은 업데이트되지 않습니다. 뒤에

코드 :

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에 버튼을 넣으면 UpdatePanel 'UpdatePanel1'에서 트리거에 대해 'ID가있는 컨트롤'Button1 '을 (를) 찾을 수 없습니다. – vapcguy

+1

버튼은 UpdatePanel 외부에있을 수 있습니다. 트리거 목록에 포함되어 있으면 비동기 포스트 백이 트리거됩니다. – ConnorsFan

0

코드 <asp:ContentTemplate></asp:ContentTemplate> 대신 <ContentTemplate>과 UpdatePanel에서 </ContentTemplate> 태그가 있습니다. 나는 이것을 바로 잡았고 이제는 효과가있다. 코드가 실제 ContentTemplate 또는 그 안의 내용을 찾을 수 없으므로 컨트롤이 범위를 벗어났습니다.

+1

그리고 이제이 대답은 반대의 문제가 있습니다. :-) – ConnorsFan

+0

@ ConnorsFan 다시 붙 잡혔습니다! 수정 됨. 긴 하루! 감사. – vapcguy

+0

다른 답변이 부정확 한 경우에도 투표를 진행하고 있으므로 특히 자신의 답변을 수락 할 수 있습니다 (죄송합니다). – ConnorsFan