Como faço para obter um botão que está dentro de um asp: UpdatePanel para atualizar a página inteira?

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

Pergunta

Eu tenho um botão dentro de um painel de atualização que gostaria de atualizar a página inteira. Eu tenho ChildrenAsTriggers="false" set e UpdateMode="Conditional".

Eu tenho um código de exemplo aqui que demonstra o meu problema.

<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>

E o código por trás:

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");
}

Eu quero atualizar o rótulo que não está dentro de um painel de atualização quando o segundo botão é clicado. O segundo botão precisa estar em um painel de atualização. Eu não quero colocar a etiqueta em um painel de atualização.

Foi útil?

Solução

Tente adicionar um PostBack gatilho para o primeiro UpdatePanel, para o segundo botão. Que vai dizer que o painel de atualização, que o botão deve fazer um postback completo.

Outras dicas

ScriptManager.GetCurrent (Página) .RegisterPostBackControl (botão); vai resolver o seu problema

Se você adicionar um PostBackTrigger para o primeiro painel de atualização como assim

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

Isto fará com que um posto de volta cheia de acontecer quando o segundo botão é clicado. Este é o comportamento exato que eu estava procurando.

Eu tive um caso semelhante, mas um pouco mais complexo e ele me levou mais de um dia para descobrir esta resposta. (A resposta é essencialmente o mesmo que o dado por @serkan. Eu só estou expandindo sobre ele.) Tivemos um controle de usuário ASP.NET que tinha um botão que, quando clicado, gerada uma imagem e desencadeou um download da imagem . Isso funcionou muito bem em uma página normal, mas não em todos, quando o controle de usuário foi incorporado em um painel de atualização. Eu não conseguia descobrir como dizer o painel de atualização para fazer uma nova postagem regular para apenas neste botão, especialmente desde que o botão foi dentro do controle de usuário sem acesso óbvio para ele a partir da página de usá-lo.

O que finalmente funcionou foi extremamente simples. Não houve necessidade de tentar especificar o gatilho postback para o painel. Pelo contrário, no Page_Load do user control, Eu adicionei o seguinte:

    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...

Além disso, eu criei a propriedade ChartSaveButton para obter acesso fácil ao controle do botão:

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

( "btnDownloadChart" é o ID do botão.)

Era uma estrada dolorosa para chegar aqui, mas estou satisfeito a solução é tão elegante. Espero que isso irá ajudá-lo.

Para mim, essa configuração não faz sentido. manter em mente que, enquanto atualização painéis podem ser uma ótima maneira de conseguir uma ajax como efeito muito facilmente, eles não são ideal em todas as situações.

se sua arquitetura página requer o arranjo dos elementos que você tem no seu exemplo, você pode ser melhor fora olhando para usar métodos de página ou serviço com javascript para atualizar o rótulo.

Se a etiqueta não estiver em um painel de atualização a única maneira de atualizar o valor é de atualizar a página inteira como em um postback normal. Você teria que fazer um redirecionamento para a mesma página para atualizá-la. O quadro ajax sabe lidar com os redirecionamentos mesmo que o pedido é de um painel de atualização tão só fazer um Response.Redirect (...) no botão de clique.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top