2008-11-28 11 views
16

¿Cuál es la forma preferida de configurar el título html (en cabecera) para verlo al usar páginas maestras?ASP.NET MVC: vista con la página maestra, ¿cómo establecer el título?

Una forma es mediante el uso de Page.Title en el archivo .aspx, pero eso requiere una página maestra que puede interferir con el código HTML. Por lo tanto, supongamos que no hay controles del lado del servidor, solo html puro. Alguna mejor idea?

ACTUALIZACIÓN: Me gustaría establecer el título en la vista NO en el controlador o modelo.

Respuesta

-3

Terminamos con

<head runat=server visible=false> 

en la página principal.

De esta forma podemos leer de Page.Title (Page.Title requiere que el elemento principal exista, de lo contrario arroja una excepción, se verifica con un reflector). Luego usamos nuestro propio elemento principal - forma MVC.

+0

Eso no es realmente MVC – UpTheCreek

-1

Existe una propiedad de título de la directiva @Page para páginas de contenido.

+1

Sí, pero yo sai d arriba, requiere en la página maestra, que no es lo que quiero. – bh213

+1

Su pregunta no tiene sentido entonces, porque está diciendo que desea establecer el título de su página de contenido utilizando construcciones del lado del servidor, pero no desea usar construcciones del lado del servidor. – sliderhouserules

+0

Bueno, me gustaría evitar cualquier control aspx. come algunos de los html que usamos, que podríamos resolver, pero preferiría usar solo html puro. Sin embargo, las páginas maestras y los controles deberían ser aceptables. – bh213

2

Cuando creo un nuevo proyecto MVC, tiene archivos allí y usa una página maestra. Al ver que parece que pasa el título a ViewData como ViewData ["Título"] y en la página maestra, en el <head> hay un bloque de script que genera ViewData ["Título"].

11

Veo mucha gente que usa la opción <%= ViewData["Title"] %>.

Supongo que también podría insertar un título con el nombre ContentPlaceHolder y luego simplemente usarlo en su página, pero en todos los ejemplos de MVC que he visto, utilizan la primera opción.

-7

Siempre se puede usar javascript en su página de vista:

<script type="text/javascript> 
    document.title = "Hello World"; 
</script> 
+0

No haga esto ya que JavaScript nunca es un 100% dado. –

+0

Vas a estar desperdiciando algunas oportunidades de SEO también – UpTheCreek

-1

Para las páginas de contenido ASP.NET simplemente agregue Title="" en el marcador de posición <%@ %>.

+0

Esto es lo que dije anteriormente. – sliderhouserules

1

Terminé usando un archivo de código subyacente para implementar Page.Title="..." en el método Page_Load().

No me gustó hacer esto, sin embargo, los intentos de implementar el cambio directamente en la página .aspx no funcionaron, ya que resultó en la presencia de dos etiquetas <title>, la que generé y la que generó el Maestro archivar la página heredada.

Idealmente, mi código de página debería haber anulado el valor <title> del archivo maestro, pero supongo que esta es solo una de esas peculiaridades que ASP.Net MVC todavía tiene, y una que ya puede solucionarse en una versión más nueva de la ASP .Net MVC Framework (todavía estamos en ASP.Net MVC Beta)

+0

Esto ha cambiado en los RC. –

32

En nuestras páginas maestras, creamos tanto un "init" ContentPlaceHolder, como un "título" ContentPlaceHolder. Si alguien quiere establecer Programtically Page.Title, puede configurarlo en CSharp en el marcador de posición init, o puede anular el marcador de posición "title" utilizando etiquetas.

página maestra

<asp:ContentPlaceHolder id="init" runat="server"></asp:ContentPlaceHolder> 
<head runat="server">  
    <asp:ContentPlaceHolder ID="title" runat="server"> 
     <title><%=this.Page.Title%></title> 
    </asp:ContentPlaceHolder> 
</head> 

Ver página bien podría invalidar todo el "título" marcador de contenido:

<asp:Content ID="Content1" ContentPlaceHolderID="title" runat="server"> 
     <title>Home Page</title> 
</asp:Content> 

o establecer mediante programación el título de la página.

<asp:Content ID="Content1" ContentPlaceHolderID="init" runat="server"> 
    <%this.Title = "Home Page";%> 
</asp:Content> 

Asegúrese de retirar la Título = "" de la directiva de página en la parte superior, o no será capaz de cambiar mediante programación Page.Title.

+0

Solo necesita runat = "server" en la etiqueta head si tiene la intención de rellenar el título de la directiva Title = "" en la parte superior de su vista. De lo contrario, es mejor dejarlo fuera. – UpTheCreek

+0

Esto fue perfecto: necesitaba una forma de admitir esto en las vistas heredadas basadas en Web Forms. Por supuesto, ya es compatible con Razor con la sintaxis ViewBag.propertyName que puede conducir a todas las vistas de Razor antes de declarar su página de diseño. ¡Gracias de nuevo! – Rob

0

Tengo una clase de vista base que establece el título de la página desde un archivo de recursos. Funciona bastante bien para mí

1

Se puede hacer esto en su página maestra:

<title> 
    <%:MyTitle + " :: " %> 
    <asp:ContentPlaceHolder ID="TitleContent" runat="server"> 
    </asp:ContentPlaceHolder> 
</title> 

donde MyTitle = algún valor de su web.config o texto duro como "Mi Web"

Ahora en las páginas de vista (Índice de ejemplo):

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
<%:"My Home Page"%> 

Ahora cuando navega por la página de inicio, la tI sería "My Web :: My Home Page".

+1

Hola, me gusta este enfoque! ¡Funciona! Y realizo algunas modificaciones para colocar el separador "::" de la página maestra en la (s) página (s) de visualización, por lo que podemos evitar mostrar un "::" vacío en la página de inicio. – Jony

+0

Gracias @Jony –

0

he creado una clase llamada de solicitud con una propiedad Título (utilizando get/set):

public static class Application 
{ 
    static string title; 

    public static string Title 
    { 
     get { return title; } 
     set { title = value; } 
    } 
} 

entonces me puse la propiedad en el caso Load para cada página:

Application.Title = "Silly Application"; 

entonces solo menciono esa propiedad en la página maestra:

<div id="divApplicationTitle"> 
    <asp:HyperLink runat="server" NavigateUrl="~/Default.aspx"><asp:Image ID="imgApplicationImage" runat="server" SkinID="skinApplicationLogo" /><%=Application.Title%></asp:HyperLink> 
</div> 
Cuestiones relacionadas