2009-03-09 12 views
14

acabo dado cuenta recientemente de que mi título de la página se restablecerá a la norma "sin título de página" después de realizar una asyncpostback desde el interior de mi UpdatePanel en la página principal. El título no se perderá durante una devolución de datos desde el interior de la página maestra (como cuando hago clic en el botón del cuadro de búsqueda dentro de la página maestra).Título de la página después de perder UpdatePanel asyncpostback

Supuse que al usar un contentplaceholder diferente específicamente para establecer el título del documento iba a evitar problemas como este, pero aparentemente estaba equivocado. ¿Hay algo más que me falta aparte de tener que establecer explícitamente el título en el código subyacente de la página ASPX (que esperaba evitar con la forma en que se configuró a continuación)?

Aquí está la esencia básica de mi página que está llamando a la página maestra (código de página maestra a continuación)

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

Ésta es la de la página maestra. El ASP.NET AJAX ScriptManager se coloca primero después de la etiqueta <form> en el cuerpo.

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

Respuesta

5

¿Se opone a utilizar la propiedad Título de la página de contenido?

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

También puede acceder a esta programación en la carga de la página ...

+1

Gracias por hacerme sentir como un idiota :) – TheTXI

+1

tuve la misma experiencia de la semana pasada ... – TGnat

7

nos encontramos con este problema exacto en uno de nuestros sitios.

La solución inmediata era restablecer el título en el método de la página maestra codebehind page_load.

Aparentemente cuando ocurre la llamada ajax, está volviendo a ejecutar la página maestra. Esto estaba causando que nuestro título desapareciera.

Por ejemplo:

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

Una mejor solución es dejar caer la basura UpdatePanel MS y comenzar a usar JSON/jQuery en el que realmente tiene cierto control sobre las llamadas decente.

-2

Se puede poner el título de página en Viewstate y luego simplemente agarrar la cuerda en el evento Click botón de devolución de datos y asignarlo a la página. Título

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

En la página cargar asignación: MyPageTitle = "Mi Cool Título de la página web"; Luego, en caso de clic de botón:

protected void MyLinkButton_Click(object sender, EventArgs e) 
    { 

     Page.Title = MyPageTitle; 

    } 
1

En lugar de cambiar el código del lado del servidor, ¿por qué no fijarlo en 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

es un error raro que se pueden workedaround si se quita los espacios en la etiqueta del título como:

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

Probado en Sharepoint 2010

0

Sucede cuando establece el título de manera programática y solo cuando no es PostBack. Simplemente reescriba guardar/cargar métodos de devolución de datos para mantener el título en la bolsa 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; 
    } 
Cuestiones relacionadas