Adding title in contentplaceholder adds second empty title tag
-
21-08-2019 - |
Question
My master page has a contentplaceholder in the head tag.
Because I want my page's title to represent the function of the current page and because I want the title to be translated in the user's language I have added a title tag in the page's head's contentplaceholder. All jolly and good except that now there appears a second, empty title tag that off course isn't valid.
Any ideas how to solve this?
Solution
I ran into the same problem and found a solution that seems to work. It's pretty hacky but at the same time pretty simple. Just add another title tag in the head, put a runat="server" attribute inside it and then set it's visibility to false:
<title visible="false" runat="server"><%-- hack to turn the auto title off --%></title>
OTHER TIPS
According to the W3C spec:
Every HTML document must have a TITLE element in the HEAD section.
Therefore, the ASP.Net platform is conforming to standards and adding an empty title tag to your page to help you achieve valid markup - it doesn't know you are about to add one through a content placeholder.
Under classic ASP.Net your options are:
- Use the @page directive Title to set the content of this tag
- Use the Page.Title property from your code behind to set the value programmatically.
If you are using ASP.Net MVC, the default Site.Master file had the following default text:
<title><%= Html.Encode(ViewData["Title"]) %></title>
And the default controller had:
ViewData["Title"] = "Home";
within the action result, again allowing for programmatic access to the page title.
Generally I use the HeadContent content placeholder for adding page specific static scripts and css links.
There is an attribute in the @Page directive called Title for setting the title of the page. It is also available accessible as a property on the Page control.
You do not need to explicitly declare a within the tag via the content place holder.
At least it is for basic ASP.NET pages using MasterPages. Not so sure for ASP.NET MVC.
Clear the runat="server" attribute on masterpages tag
It would appear the best way to set the title would be to use the title attritube in the markup declaration here:
<%@ Page Title="PAGE NAME HERE" Language="C#" MasterPageFile="~/Controls/MasterPage/MasterPage.master"
AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %>
OR Just set it in page_load with
Page.Title = "Your page title"
Hope this somewhat.