2009-08-26 15 views
0

J'utilise un panneau de mise à jour pour mettre à jour une partie de ma page de manière asynchrone. Sa navigation doit être enregistrée lorsqu'un Multiview change son index actif.Comment enregistrer des entrées d'historique (Précédent/Suivant) dans une vue multiple (sur l'index actif modifié)

Par exemple, lorsque la page charges, l'indice Multiview Active = 0. Lorsque l'utilisateur clique sur un lien, je montre le contenu de l'index de vue 1.

Il est vraiment important de permettre à l'utilisateur pour aller en arrière et en avant en utilisant l'historique du navigateur.

Le ScriptManager est situé dans une page maître et sa propriété EnableHistory est définie sur True.

Est-ce que quelqu'un l'a implémenté en travaillant avec Multiview?

Répondre

2

Je pense que cela devrait fonctionner, mais vous devrez le personnaliser un peu. Je fais quelque chose de très similaire, mais j'ai dû abandonner l'utilisation de la multview dans updatepanel en raison d'un problème avec un contrôle tiers que j'avais intégré à l'intérieur.

Vous devrez ajouter une référence à votre page maître dans votre fichier aspx en utilisant la balise asp.net ci-dessous. Et aussi, exposer le scriptmanager comme un contrôle public dans votre page maître afin que vous puissiez lui câbler un événement. Dans le code de conception/html de votre page: mettez à jour le chemin virtuel vers votre maître ou utilisez le type pour assigner la référence de type.

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

Dans le cas d'initialisation de votre page:

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

Ensuite, dans le cas de chargement de votre page:

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

Ensuite, ajoutez ce nouveau gestionnaire d'événements à votre page. Ceci appelle l'article "myArgs", vous devriez utiliser quelque chose d'un peu plus intuitif pour votre contenu. Dans ma mise en œuvre, j'ai une série d'éléments (comme l'ordre de tri, l'index de la page, etc. séparés par des delims, puis les décomposons et les assignons).

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

Les arguments seront l'index multivue. Ce ne sont que des fonctions d'aide que j'utilise. Si index est le seul élément qui vous intéresse, vous pouvez simplement ajouter ces appels aux méthodes principales.

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

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

Ensuite, lorsque vous déclenchez l'événement qui change l'index actif, ajoutez à ces méthodes

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

Espérons que cela vous donne un peu d'aide.

+0

Salut Jim, Merci beaucoup, il fonctionne maintenant comme il se doit! Josi –

0

Vous ne devriez pas utiliser this.IsAsync mais plutôt ScriptManager.GetCurrent(Page).IsInAsyncPostBack (ou dans votre cas, this.Master.ScriptManager.IsInAsyncPostBack).