2009-02-27 7 views
5

Sto ottenendo il seguente avviso validazione XHTML nella mia pagina master ASP.NET MVC:Element 'title' si verifica anche alcune volte, avvertimento validazione XHTML nella pagina master ASP.NET.MVC

Validation (XHTML 1.0 Transitional): Il "titolo" dell'elemento si verifica troppo poche volte.

Il tag title per la pagina master è incluso in ContentPlaceHolder nel tag head come mostrato nel codice seguente. Il tag title in ContentPlaceHolder non viene preso in considerazione quando si esegue la convalida e non voglio aggiungerne un altro nel tag head perché in quel caso rimarranno due tag title.

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <meta http-equiv="Content-Style-Type" content="text/css" /> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 
     <title></title> 
    </asp:ContentPlaceHolder> 
</head> 

Un lavoro intorno che ho trovato è quello di utilizzare la seguente tecnica nel tag head:

<% if (false) { %> 
    <title></title> 
<% } %> 

E 'questa la pratica migliore per risolvere il problema segnalato? Non sono un grande fan di aggiungere il codice in eccesso solo per passare avvisi di convalida, ma vivrò con esso se non c'è un'alternativa migliore.

risposta

13

fare questo, invece:

<head> 
    <title><asp:ContentPlaceHolder ID="title" runat="server">Default Page Title Here</asp:ContentPlaceHolder></title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <meta http-equiv="Content-Style-Type" content="text/css" /> 
    <asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder> 
</head> 

O come un supplente, impostare il titolo programattically da ogni pagina.

Quello che sta succedendo nel tuo caso è che quando si crea una nuova vista, crea elementi di contenuto vuoti che sostituiscono il contenuto di default nei segnaposti. Se rimuovi i blocchi di contenuti vuoti dalla vista, verrà utilizzato il contenuto del segnaposto predefinito, ma non potrai impostare i contenuti dalla vista. Usando il codice sopra puoi sovrascrivere un titolo predefinito da ogni vista e includere script, ecc. Nella testa indipendentemente l'uno dall'altro.

+0

Sono sorpreso che non è la sintassi predefinita che generano quando si crea un nuovo progetto ASP.NET MVC-. Grazie per la risposta rapida! – Blegger

+1

Non lo generano in modo predefinito perché il titolo può essere impostato nella direttiva vista della pagina o in una miriade di altri modi. –

+0

Ho visto contentplaceplaceholders per la testa, ma mai uno specificamente per il tag title. Anche se sembra stupido come tutti escono, è bellissimo, lol. +1 – TheTXI

1

Ecco le soluzioni possibili sono prima soluzione è

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<meta http-equiv="Content-Style-Type" content="text/css" /> 
<asp:ContentPlaceHolder ID="head" runat="server"> 
    //<title></title> - this line should be removed. 
</asp:ContentPlaceHolder> 

seconda soluzione è, Controllare se il tag con attributo runat = "server" testa, se non è stato impostato runat prperty significa non un altro problema necessario per rimuovere il tag runat.

Problemi correlati