2008-11-28 2 views
16

Что предпочтительный способ настройки заголовка html (в голове) для просмотра при использовании мастер-страниц?ASP.NET MVC - просмотр с главной страницы, как установить заголовок?

Один из способов - использовать страницу .Title в .aspx-файле, но это требуется на главной странице, которая может испортить код HTML. Таким образом, давайте не берем никаких элементов управления на стороне сервера, только чистый html. Любые лучшие идеи?

ОБНОВЛЕНИЕ: Я хотел бы установить заголовок в поле зрения НЕ в контроллере или модели.

ответ

-3

Мы закончили с

<head runat=server visible=false> 

в главной странице.

Этот способ мы можем прочитать на странице. Title (Страница .Title требует, чтобы элемент главы существовал, иначе он выдает исключение, проверял его с отражателем). Затем мы используем собственный элемент head - MVC.

+0

Это не действительно MVC – UpTheCreek

-1

Существует свойство Title директивы @Page для страниц контента.

+1

Да, но я сказал выше, он требует на главной странице, чего я не хочу. – bh213

+1

Тогда ваш вопрос бессмыслен, потому что вы говорите, что хотите установить заголовок своей страницы контента с использованием конструкций на стороне сервера, но вы не хотите использовать серверные конструкции. – sliderhouserules

+0

Ну, я бы хотел избежать любых элементов управления aspx. ест часть html, которую мы используем, которую мы можем решить, но я бы предпочел использовать только чистый html. Однако мастер-страницы и элементы управления должны быть приемлемыми. – bh213

2

Когда я создаю новый проект MVC, у него есть файлы и он использует главную страницу. Глядя на то, что кажется, что он передает название ViewData как ViewData ["Title"] и на главной странице, в <head> есть блок сценариев, который выводит ViewData ["Title"].

11

Я вижу много людей, которые используют опцию <%= ViewData["Title"] %>.

Я полагаю, вы также можете вставить имя ContentPlaceHolder с именем Title, а затем просто использовать его на своей странице, но во всех примерах MVC, которые я видел, они используют первый вариант.

-7

Вы всегда можете использовать JavaScript на странице просмотра:

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

Не делайте этого, поскольку JavaScript никогда не предоставляется на 100%. –

+0

Вы тоже будете растрачивать некоторые возможности для SEO – UpTheCreek

-1

Для страниц содержания ASP.NET просто добавьте Title="" в блокнот <%@ %>.

+0

Это то, что я сказал выше. – sliderhouserules

1

Я закончил с использованием кода для файла Page.Title="..." в методе Page_Load().

Мне не понравилось это делать, однако попытки реализовать изменение непосредственно на странице .aspx не работали, так как в результате присутствовали два тега <title>, тот, который я сгенерировал, и тот, который был сгенерирован мастером файл, наследуемый от.

В идеале, мой код страницы должен был переопределить значение <title> главного файла, но я думаю, что это лишь один из тех причуд, которые все еще имеет ASP.Net MVC, и тот, который уже может быть исправлен в более новой версии ASP .Net MVC Framework (мы все еще работаем над ASP.Net MVC Beta)

+0

Это изменилось в RC. –

32

На наших основных страницах мы создали как «init» ContentPlaceHolder, так и «title» ContentPlaceHolder. Если кто-то хочет программно установить Page.Title, они могут установить его в CSharp в placeholder-заполнителе, или они могут переопределить местозаполнитель «title», используя теги.

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 может либо отменить весь "название" содержание заполнитель:

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

или программно установить заголовок страницы.

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

Убедитесь, что вы удалите Title = «» из директивы Страница в верхней части, или вы не сможете изменить программно Page.Title.

+0

Вам нужен только runat = "server" в заголовке, если вы намереваетесь заполнить заголовок из директивы Title = "" в верхней части вашего представления. В противном случае лучше оставить это. – UpTheCreek

+0

Это было прекрасно - мне нужен был способ поддержать это в устаревшем виде на основе Web Forms. Конечно, он уже поддерживается через Razor синтаксисом ViewBag.propertyName, который может отображать все виды Razor перед объявлением их страницы макета. Еще раз спасибо! – Rob

0

У меня есть класс базового представления, который задает заголовок страницы из файла ресурсов. Работает очень хорошо для меня.

1

Вы могли бы сделать это в мастер-странице:

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

где MyTitle = некоторое значение из вашего web.config или жесткий текст, как «My Web»

Сейчас на страницах просмотра (индекс для пример):

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

Теперь при просмотре домашней страницы, то т itle будет «My Web :: Моя домашняя страница».

+1

Привет, мне нравится этот подход! Оно работает! И я делаю некоторые изменения на нем, чтобы поместить разделитель «::» с главной страницы на страницу просмотра, поэтому мы можем избежать отображения пустой «::» на домашней странице. – Jony

+0

Спасибо @Jony –

0

Я создал класс под названием Application со свойством Title (с помощью Get/Set):

public static class Application 
{ 
    static string title; 

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

Я тогда установить свойство на Page_Load событие для каждой страницы:

Application.Title = "Silly Application"; 

то я просто ссылаюсь на это имущество на главной странице:

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