전체 페이지를 업데이트하려면 ASP : UpdatePanel 내부에있는 버튼을 얻으려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/221595

문제

전체 페이지를 업데이트하고 싶은 업데이트 패널 안에 버튼이 있습니다. 나는 설정했다 ChildrenAsTriggers="false" 그리고 UpdateMode="Conditional".

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

<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를 업데이트 패널에 넣고 싶지 않습니다.

도움이 되었습니까?

해결책

Secound 버튼의 첫 번째 UpdatePanel에 PostBackTrigger를 추가하십시오. 즉, 해당 업데이트 패널이 알 수 있습니다. 버튼이 전체 포스트 백을 만들어야합니다.

다른 팁

scriptManager.getCurrent (페이지) .registerpostbackControl (버튼); 문제를 해결할 것입니다

PostbackTrigger를 다음과 같은 첫 번째 업데이트 패널에 추가하면

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

두 번째 버튼을 클릭하면 전체 게시물이 다시 발생합니다. 이것은 내가 찾고 있던 정확한 행동입니다.

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

마침내 일한 것은 매우 간단했습니다. 패널의 포스트 백 트리거를 지정하려고 시도 할 필요가 없었습니다. 오히려, 페이지의 페이지에서 사용자 제어, 다음을 추가했습니다.

    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 버튼 컨트롤에 쉽게 액세스 할 수있는 속성 :

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

( "btndownloadchart"는 버튼의 ID입니다.)

여기에 도착하는 것은 고통스러운 길 이었지만 솔루션은 매우 우아합니다. 이것이 당신을 도울 수 있기를 바랍니다.

나 에게이 설정은 의미가 없습니다. 업데이트 패널은 Effect와 같은 Ajax를 매우 쉽게 달성하는 좋은 방법이 될 수 있지만 모든 상황에서 이상적인 것은 아닙니다.

Page Architecture에 예제에서와 같이 요소 배열이 필요한 경우 JavaScript와 함께 페이지 또는 서비스 메소드를 사용하여 레이블을 업데이트하는 것이 좋습니다.

레이블이 업데이트 패널에 있지 않은 경우 일반적인 Postback에서와 같이 전체 페이지를 새로 고치는 것입니다. 새로 고침하려면 같은 페이지로 리디렉션을 수행해야합니다. AJAX 프레임 워크는 요청이 업데이트 패널에서 나오더라도 리디렉션을 처리하는 것을 알고 있으므로 버튼 클릭의 응답 (...) 만 수행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top