bh213
bh213

Reputation: 6529

ASP.NET MVC - View with master page, how to set title?

What is prefered way of setting html title (in head) for view when using master pages?

One way is by using Page.Title in .aspx file, but that requires in master page which can mess with HTML code. So, lets assume no server side controls, only pure html. Any better ideas?

UPDATE: I would like to set title in view NOT in the controller or model.

Upvotes: 16

Views: 27470

Answers (11)

Stace
Stace

Reputation: 1

I created a class called Application with a Title property (using get/set):

public static class Application
{
    static string title;

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

I then set the property on the Page_Load event for each page:

Application.Title = "Silly Application";

then i just reference that property on the master page:

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

Upvotes: 0

Venugopal M
Venugopal M

Reputation: 2412

You could do this in your Master Page:

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

where MyTitle = some value from your web.config or hard text like "My Web"

Now in the view pages (Index for example):

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

Now when you browse your home page, the title would be "My Web :: My Home Page".

Upvotes: 1

Kai
Kai

Reputation:

For ASP.NET content pages just add Title="" in the <%@ %> Placeholder.

Upvotes: -1

Esteban Araya
Esteban Araya

Reputation: 29664

I have a base view class that sets the page title from a resource file. Works pretty good for me.

Upvotes: 0

hugoware
hugoware

Reputation: 36397

I see a lot of people that use the <%= ViewData["Title"] %> option.

I suppose you could also insert a ContentPlaceHolder named Title and then just use that on your page, but in all the MVC examples I've seen, they use the first option.

Upvotes: 11

Andrew Csontos
Andrew Csontos

Reputation: 662

In our master pages, we created both an "init" ContentPlaceHolder, and a "title" ContentPlaceHolder. If someone wants to programatically set Page.Title, they can set it in CSharp in the init placeholder, or they can override the "title" placeholder using tags.

Master Page

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

View Page Could either override the entire "title" content placeholder:

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

or programatically set the page title.

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

Make sure you remove the Title="" from the Page directive at the top, or you won't be able to programatically change Page.Title.

Upvotes: 32

reddi.tech
reddi.tech

Reputation: 2423

I ended up using a code-behind file to implement Page.Title="..." in the Page_Load() method.

I didn't like doing this, however attempts to implement the change directly in the .aspx page did not work, as it resulted in two <title> tags being present, the one I generated, and the one generated by the Master file the page inherited from.

Ideally, my page code should have overridden the master file's <title> value, but I guess this is just one of those quirks that ASP.Net MVC still has, and one that may already be fixed in a newer version of the ASP.Net MVC Framework (we're still on ASP.Net MVC Beta)

Upvotes: 1

bh213
bh213

Reputation: 6529

We ended up with

<head runat=server visible=false>

in master page.

This way we can read from Page.Title (Page.Title requires head element to exist, otherwise it throws an exception, checked that with reflector). We then use our own head element - MVC way.

Upvotes: -4

Todd Smith
Todd Smith

Reputation: 17272

You could always use javascript in your view page:

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

Upvotes: -8

dtc
dtc

Reputation: 10296

When I create a new MVC project it has files in there and uses a master page. Looking at that it seems it passes the title to the ViewData as ViewData["Title"] and in the master page, in the <head> there is a script block that outputs ViewData["Title"].

Upvotes: 2

ChrisN
ChrisN

Reputation: 3413

There is a Title property of the @Page directive for content pages.

Upvotes: -1

Related Questions