Почему в ASP.NET MVC есть заголовок ContentPlaceHolder? - PullRequest
5 голосов
/ 29 июня 2009

На новом сайте ASP.NET есть заголовок ContentPlaceHolder для заголовка:

<head runat="server">
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>

На странице:

<asp:Content ID="aboutTitle" ContentPlaceHolderID="TitleContent" runat="server">
    About Us
</asp:Content>

Почему это? Почему нельзя использовать свойство / атрибут title в директиве страницы?

<%@ Page Title="About Us" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

Оба метода имеют одинаковый результат. Для меня подход ContentPlaceHolder кажется хакский .

Если вам нужен динамический заголовок, вы можете сделать это следующим образом на странице aspx:

<%= this.Title = "About Me" %>

Ответы [ 4 ]

3 голосов
/ 30 июня 2009

Посмотреть это сообщение .

2 голосов
/ 30 июня 2009

Если вместо этого вы используете атрибут Title директивы @ Page , вам придется устанавливать заголовок для всего приложения в каждом представлении, дублируя код и нарушая принцип единой ответственности.

1 голос
/ 29 июня 2009

Одно возможное объяснение (хотя это не относится к вашему простому примеру) - когда у вас есть содержимое скрипта в вашем элементе <head>, вы не можете добавить runat = "server" или получить к нему доступ через Page.Head. Например (извините, это не в моей голове):

<head>
<script type="text/javascript" src="<%= ResolveClientUrl("~/Scripts/script.js") %>"></script>
</head>

В этом примере использование ContentPlaceHolder было бы одним из способов обойти невозможность программного доступа к голове. Конечно, вы могли бы также использовать <title><%= Page.Title %></title>, это зависит от ваших предпочтений (лично я бы немного порвался).

0 голосов
/ 29 июня 2009

Вы не должны думать о своих представлениях как о гигантских объектах, с которыми вы программно взаимодействуете в MVC, они должны быть облегченными шаблонами для генерации HTML.

Если вы думаете о своих представлениях как о шаблонах, а не как об объектах, то использование <ContentPlaceHolder /> намного проще, чем использование runat="server"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...