Como posso registar entradas de histórico (Voltar / Avançar) em um Multiview (no Active Índice alterado)

votos
0

Eu estou usando um painel de atualização para ter parte da minha atualização página de forma assíncrona. Sua navegação precisa ser registrado quando um Multiview muda seu índice ativo.

Por exemplo, quando a página é carregada pela primeira vez, o ativo Índice Multiview = 0. Quando o usuário clica em um link, eu mostrar o conteúdo do índice Ver 1.

É realmente importante para permitir que o usuário para ir para trás e para a frente usando o histórico do navegador.

O ScriptManagersitua-se em uma página principal e tem a sua EnableHistorypropriedade definida como True.

Tem alguém implementado quando se trabalha com Multiview?

Publicado 26/08/2009 em 22:55
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Eu acho que isso deve funcionar, mas você vai precisar para personalizá-lo um pouco. Estou fazendo algo muito semelhante, mas eu tive que afastar-se de usar o MULTVIEW dentro updatepanel devido a um problema com um controle de terceiros que eu tinha incorporado dentro dele.

Você precisará adicionar uma referência para sua página mestre em seu arquivo aspx usando a tag asp.net abaixo. E também, expor o scriptmanager como um controle público na sua página mestra para que você possa conectar um evento para ele.

No código de projeto / HTML da sua página: Atualize o caminho virtual para o seu mestre ou usar o tipo para atribuir o tipo de referência.

<%@ MasterType VirtualPath="~/MasterPage.master" %>

No evento init da sua página:

public void Page_Init(object sender, EventArgs e)
{
    // can be done at MasterPage level if you like
    this.Master.ScriptManager.EnableHistory = true;
}

Em seguida, no evento de carregamento da sua página:

protected void Page_Load(object sender, EventArgs e)
{              
    this.Master.ScriptManager.Navigate += 
    new EventHandler<HistoryEventArgs>(ScriptManager_Navigate);

    if (!this.IsPostBack && !ScriptManager.GetCurrent(this).IsInAsyncPostBack)
    {
        // load default multiview index
    }           
}

Em seguida, adicione este novo manipulador de eventos para sua página. Este nomes item "myArgs", você deve usar algo um pouco mais intuitiva para o seu conteúdo. Na minha aplicação, eu tenho uma série de itens (ordem de classificação como, índice de página, etc. separados por delims e depois dividi-las e atribuir-lhes).

protected void ScriptManager_Navigate(object sender, HistoryEventArgs e)
{
    if (!string.IsNullOrEmpty(e.State["myArgs"]))
    {
        string args = e.State["myArgs"];
        SetMyArgs(args);                           
    }
    else
    {
        // just load default
    }
}

Os argumentos serão o índice multivista. Estes são apenas funções auxiliares que eu uso. Se o índice é o único item que lhe interessa, então você pode apenas in-line essas chamadas aos principais métodos.

private void SetMyArgs(string args)
{
    int myIndex = int.Parse(args);
    // set multiview index here?
}

private string GetMyArgs()
{
    return myMultiview.ActiveIndex.ToString();
}

Então, quando você acionar o evento que muda o índice ativo, adicione a esses métodos

if (this.IsAsync)
{
    this.Master.ScriptManager.AddHistoryPoint("myArgs", GetMyArgs());
}

Esperemos que este dá-lhe alguma ajuda.

Respondeu 27/08/2009 em 00:40
fonte usuário

votos
0

Você não deve usar this.IsAsync, mas sim ScriptManager.GetCurrent(Page).IsInAsyncPostBack(ou no seu caso, this.Master.ScriptManager.IsInAsyncPostBack).

Respondeu 13/03/2013 em 11:18
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more