简体   繁体   中英

Appending to default title in asp.net masterpage

I am using the MVC to add a title to the masterpage with a content place holder. The default MVC masterpage template uses the following code:

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server"/></title>
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>

When I try to add defaulted text to the front of the content holder, it doesn't show the text in the final rendered page. I am trying to get the page to show a default title with appended contentplaceholder text.

Example:
(Default Text) (ContentPlaceHolder Text)
My Page - About Us

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>My Page - <asp:ContentPlaceHolder ID="TitleContent" runat="server"/></title>
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>

I am looking for a way to accomplish this without having to use code behind. Any ideas?

It seems we should use

<asp:Literal runat="server" Text=" - MySite" />

instead of

<asp:LiteralControl runat="server" Text=" - MySite" />

mentioned in the article, because otherwise we get "Unknown server tag" error.

After looking further, Phil Haack actually posted an article which was a solution to my question. It can be found at Haacked .

In summary he said that everything that is rendered in the head is rendered as a control, and the fix for my question above is to put an asp literal control in the title to have it correctly generate the text.

<%@ Master ... %>
<html>
<head runat="server">
  <title>
    <asp:ContentPlaceHolder ID="titleContent" runat="server" /> 
    <asp:LiteralControl runat="server" Text=" - MySite" />
  </title>
</head>
...

Why?

<title>
    <asp:ContentPlaceHolder ID="titleContent" runat="server" />
    <%= "- My Site" %>
</title>

Works just as well. Without the hassle?

I prefer to use this:

<title>Site Name - <%=Page.Title%></title>

Much cleaner than using a literal control..

If you are using MVC and are passing the title in some object from the controller to the page I would use inline code to display this.

We use the MVC contrib functions to get typed data directly from the view data in the master page thus:

<head>
<title>My Page - <%= ViewData.Get<Model.Page>().Title %></title>
</head>

As a point of note we have removed all code behind files from every view we have to make the views more legible, we find this much better than having code behind for each view.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM