2008-10-21 2 views
3

전체 페이지를 업데이트하고 싶은 업데이트 패널 안에 버튼이 있습니다. ChildrenAsTriggers="false"UpdateMode="Conditional"을 설정했습니다.asp : UpdatePanel 안에있는 버튼을 사용하여 전체 페이지를 업데이트하려면 어떻게합니까?

여기에 내 문제를 보여주는 샘플 코드가 있습니다.

<asp:UpdatePanel ID="myFirstPanel" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Button runat="server" ID="myFirstButton" Text="My First Button" onclick="myFirstButton_Click" /> 
     <asp:Button runat="server" ID="mySecondButton" Text="My Second Button" onclick="mySecondButton_Click" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:UpdatePanel ID="mySecondPanel" runat="server"> 
    <ContentTemplate> 
     <asp:Label runat="server" ID="myFirstLabel" Text="My First Label"></asp:Label> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="myFirstButton" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 
<asp:Label runat="server" ID="mySecondLabel" Text="My Second Label"></asp:Label> 

그리고 뒤에있는 코드 :

protected void myFirstButton_Click(object sender, EventArgs e) 
{ 
    myFirstLabel.Text = "Inside Panel " + DateTime.Now.ToString("mm:ss"); 
} 
protected void mySecondButton_Click(object sender, EventArgs e) 
{ 
    mySecondLabel.Text = "Outside Panel " + DateTime.Now.ToString("mm:ss"); 
} 

내가 두 번째 버튼을 클릭하면 업데이트 패널 내부에없는 레이블을 업데이트 할. 두 번째 단추는 업데이트 패널에 있어야합니다. 나는 lable을 업데이트 패널에 넣고 싶지 않습니다.

답변

6

secound 버튼에 대해 첫 번째 UpdatePanel에 PostBackTrigger를 추가해보십시오. 그러면 버튼이 전체 포스트 백을 만들어야한다는 것을 알리는 패널이 업데이트됩니다.

+0

고맙습니다 Jesper! 지난 30 분 동안이 일을 어떻게하는지 알아 내려고 노력해 왔습니다. –

-2

레이블이 업데이트 패널에 없으면 값을 새로 고치는 유일한 방법은 일반적인 포스트 백과 같이 전체 페이지를 새로 고치는 것입니다. 새로 고치려면 동일한 페이지로 리디렉션해야합니다. Ajax 프레임 워크는 요청이 업데이트 패널에서 온 경우에도 리디렉션을 처리 할 수 ​​있으므로 버튼 클릭시 Response.Redirect (...) 만 수행하면됩니다.

+0

죄송합니다. 그러나 이것은 잘못된 것입니다. @serkan과 저는 명시 적 리다이렉션없이 어떻게 할 수 있는지 보여주는 답변을 제공했습니다. –

-1

이 설정은 의미가 없습니다. 업데이트 패널은 아약스 같은 효과를 매우 쉽게 얻을 수있는 좋은 방법 일 수 있지만 모든 상황에서 이상적이지는 않습니다.

예를 들어 페이지 아키텍처에서 요소의 정렬이 필요한 경우 JavaScript를 사용하여 페이지 또는 서비스 메소드를 사용하여 라벨을 업데이트하는 것이 좋습니다.

1

그렇게

<Triggers> 
    <asp:PostBackTrigger ControlID="mySecondButton" /> 
</Triggers> 

처럼 첫 번째 업데이트 패널에 PostBackTrigger를 추가하는 경우이 두 번째 버튼을 클릭하면 일이 다시 전체 게시물의 원인이됩니다. 이것은 제가 찾고 있던 정확한 행동입니다.

4

ScriptManager.GetCurrent (Page). RegisterPostBackControl (button); 당신의 문제를 해결할 것입니다

0

나는 비슷하지만 약간 더 복잡한 경우가 있었는데이 대답을 이해하는 데 하루 이상이 걸렸습니다. (답은 본질적으로 @serkan에서 제공 한 답변과 동일합니다. 방금 확장하고 있습니다.) 클릭 할 때 이미지를 생성하고 이미지 다운로드를 트리거하는 버튼이있는 ASP.NET 사용자 컨트롤이있었습니다 . 이것은 정상적인 페이지에서 아름답게 작동하지만 사용자 정의 컨트롤이 업데이트 패널에 포함 된 경우에는 전혀 작동하지 않습니다. 업데이트 패널에이 버튼에 대해서만 정기적 인 포스트 백을 수행하는 방법을 알아낼 수 없었습니다. 특히 버튼이 사용자 정의 컨트롤 내에 있었으므로 버튼을 사용하는 페이지에서 명백하게 액세스 할 수 없었습니다.

마지막으로 효과가 있었던 것은 매우 간단했습니다. 패널에 대해 다시 게시 트리거를 지정하지 않아도됩니다. 오히려, 사용자 컨트롤의를 Page_Load에서, 나는 다음과 같은 추가 :

private Control ChartSaveButton 
    { 
     get { return FindControl("btnDownloadChart"); } 
    } 

: 또한

protected void Page_Load(object sender, EventArgs e) 
    { 
     // If the chart is within an update panel then we need to tell the script manager 
     // to not do an asynch postback on chartdownload. If we don't, the download 
     // doesn't work. 
     var scriptManager = ScriptManager.GetCurrent(Page); 
     if (scriptManager != null) 
     { 
      scriptManager.RegisterPostBackControl(ChartSaveButton); 
     } 
     // Rest of Page_Load followed here... 

을, 나는 버튼의 컨트롤에 쉽게 액세스를 얻기 위해 ChartSaveButton 속성을 생성 ("btnDownloadChart"는 버튼의 ID입니다.)

여기 도착하는 것은 고통스러운 길 이었지만 해결책이 너무 우아함을 기쁘게 생각합니다. 이게 당신을 도울 수 있기를 바랍니다.

관련 문제