2009-03-09 9 views
14

Je viens de remarquer récemment que mon titre de page sera réinitialisé à la "page sans titre" standard après avoir effectué un asyncpostback depuis l'intérieur de mon UpdatePanel dans la page principale. Le titre ne sera pas perdu lors d'une publication à partir de la page principale (par exemple lorsque je clique sur le bouton de la boîte de recherche à l'intérieur de la page maître).Page perdant le titre après UpdatePanel asyncpostback

J'ai supposé qu'en utilisant un contentplaceholder différent spécifiquement pour définir le titre du document j'allais éviter des problèmes comme celui-ci, mais apparemment je me suis trompé. Y a-t-il quelque chose d'autre qui me manque à part d'avoir à définir explicitement le titre dans le code-behind de la page ASPX (que j'espérais éviter avec la façon dont il a été configuré ci-dessous)?

Voici l'essentiel de base de ma page qui appelle le maître page (code de la page principale ci-dessous)

<asp:Content ID="Content1" ContentPlaceHolderID="title" Runat="Server"> 
    Page Title 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="head" Runat="Server"> 
    <script type="text/javascript"> 
     //random javascript validators 
    </script> 
</asp:Content> 
<asp:Content ID="Content3" ContentPlaceHolderID="content" Runat="Server"> 
    <div class="title"> 
     Account Management 
    </div> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      //Username + Password Set Form 
     </ContentTemplate>  
    </asp:UpdatePanel> 

</asp:Content> 

C'est du Maître page. Le ASP.NET AJAX ScriptManager est placé en premier après la balise <form> dans le corps.

<head id="Head1" runat="server"> 
    <title> 
     <asp:ContentPlaceHolder id="title" runat="server"> 
     </asp:ContentPlaceHolder> 
    </title> 
     //Stylesheet references 

    <script type="text/javascript"> 
     //Random javascript functions 
    </script> 

    <asp:ContentPlaceHolder id="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 

Répondre

5

Êtes-vous opposé à l'utilisation de la propriété Title de la page de contenu?

<%@ Page Title="Your Page Title" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPages/... 

Vous pouvez également accéder à cette programmation dans la charge de la page ...

+1

Je vous remercie de me faire sentir comme un idiot :) – TheTXI

+1

J'ai eu la même expérience la semaine dernière ... – TGnat

7

Nous avons rencontré ce problème sur l'un de nos sites.

La solution immédiate consistait à réinitialiser le titre dans la méthode mastercode behind page_load.

Apparemment, lorsque l'appel ajax se produit, il réexécute la page maître. Cela causait la disparition de notre titre.

Par exemple:

protected void Page_Load(object sender, EventArgs e) { 
    this.Page.Title = "whatever title you have..."; 
} 

Une meilleure solution est de laisser tomber les conneries MS UpdatePanel et commencer à utiliser JSON/jQuery où vous avez réellement un contrôle décent sur les appels.

-2

Vous pouvez mettre le titre dans Viewstate puis saisir simplement la chaîne dans le bouton postback événement Click et l'affecter à la page. Titre

public string MyPageTitle 
    { 
     get 
     { 
      return (string)ViewState["MyPageTitle"]; 
     } 
     set 
     { 
      ViewState["MyPageTitle"] = value; 
     } 
    } 

Lors du chargement de la page: MyPageTitle = "My Cool Web Title Title"; Puis, en cliquage événement:

protected void MyLinkButton_Click(object sender, EventArgs e) 
    { 

     Page.Title = MyPageTitle; 

    } 
1

Plutôt que de changer votre code côté serveur, pourquoi ne pas simplement fixer dans JS:

$(function(){ 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    if (!(prm)) return; 
    document.orginalTitle=document.title; 
    prm.add_endRequest(function(s, e){ 
     if (document.title.replace(/\s/g,"").length==0) 
      document.title=document.orginalTitle; 
     }); 
}); 
3

Est-ce un bug étrange qui peut être workedaround si vous supprimez les espaces dans la balise de titre comme:

<title><asp:ContentPlaceHolder id="title" runat="server"></asp:ContentPlaceHolder></title> 

Testé sur Sharepoint 2010

0

Cela se produit lorsque vous définissez le titre de manière progammatique et seulement lorsque PostBack n'est pas disponible. Il suffit de réécrire save/load méthodes de publication pour maintenir le titre dans le sac viewstate.

protected override void LoadViewState(object savedState) 
    { 
     object[] allStates = (object[])savedState; 
     if (allStates[0] != null) 
      base.LoadViewState(allStates[0]); 
     if (allStates[1] != null) 
      Page.Title = (string)allStates[1]; 
    } 

    protected override object SaveViewState() 
    { 
     object[] allStates = new object[2]; 
     object baseState = base.SaveViewState(); 
     string pageTitle = Page.Title; 
     allStates[0] = baseState; 
     allStates[1] = pageTitle; 
     return allStates; 
    } 
Questions connexes