Pergunta

Eu estou usando .NET 3.5 e construção de páginas dentro do quadro comunitário Server 2008.

Em uma das páginas, eu estou tentando obter um trabalho UpdatePanel.

Eu levei uma amostra direto do website ASP.NET, atualizar um tempo em um UpdatePanel para o tempo atual clicando em um botão, , mas por algum motivo, quando tento executar a função de toda a página refresca .

Aqui está o que eu tenho:

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();
    Label2.Text = "Panel refreshed at " + DateTime.Now.ToString();
}
<asp:ScriptManager ID="ScriptManager1" runat="server"/>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <fieldset>
            <legend>UpdatePanel</legend>
            <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        </fieldset>
    </ContentTemplate>
</asp:UpdatePanel>

Sempre que eu clico no botão, com certeza as atualizações do painel - mas toda a página envia de volta! Eu posso ver a página inteira piscando. Que diabos estou fazendo de errado?

Eu estou dentro de um Masterpage aninhada, mas eu não tenho certeza se este é um problema. Poderia haver alguma coisa neste quadro comunitário Server que estou usando que faz com que todos os eventos de postback?

Foi útil?

Solução

Você tentou definir Button1 como um AsyncPostBackTrigger na seção Triggers? Defina a propriedade ChildrenAsTriggers para true ea propriedade UpdateMode para Conditional.

protected void Button1_Click(object sender, EventArgs e)
{    
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();    
    UpdatePanel1.Update();
}    
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
    <Triggers>        
        <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />    
    </Triggers>    
    <ContentTemplate>        
        <fieldset>            
            <legend>UpdatePanel</legend>            
            <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />            
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />        
        </fieldset>    
    </ContentTemplate>
</asp:UpdatePanel>

Outras dicas

Não estou vendo Label2 em sua amostra de código acima. Se Label2 está localizado fora do UpdatePanel, uma atualização de página inteira ocorrerá porque isso é o que é necessário para que a página corretamente atualizar Label2.

Por padrão, UpdatePanels irá atualizar única dinamicamente o conteúdo dentro deles, quando acionados por controles dentro deles. Se você precisa fazer algumas atualizações mais extravagantes, digamos, um fora botão do painel fazendo com que a atualização ou uma etiqueta em um painel diferente para ser atualizado, então você precisa definir o atributo condicional no seu UpdatePanel (s) e fazer algumas chamadas de atualização manual em seu código.

Outra possível razão é que, se a página tem ClientIDMode="static", então controles que você espera para refrescar apenas o UpdatePanel irá atualizar a página inteira.

Para corrigir o problema, você só precisa definir ClientIDMode="AutoID" na (s) o controle que deve acionar o posto de volta UpdatePanel.

Set ChildrenAsTriggers="true" no seu controle UpdatePanel.

"Por padrão, UpdatePanels irá atualizar única dinamicamente o conteúdo dentro deles, quando acionados por controles dentro deles."

Caso contrário, toda a página será atualizada! Isso é o ponto!

Se você tem um projeto antigo que foi atualizado do .NET Framework v1.1, em seguida, remova esta linha a partir de sua configuração web para fazer o trabalho:

<xhtmlConformance mode="Legacy"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top