Page.Title vs Заголовок тега в asp.net

18

Я использую asp.net. Я заметил, что мы можем настроить заголовок страницы (статический и динамический оба) двумя способами:

  1. В директиве страницы есть атрибут Title :

      <%@ Page Language="C#" Inherits="_Default"  Title="My Title" ......%>
    
  2. У нас также есть тэг <title> на странице:

    <title runat="server" id="MyTitle"> My Title</title>
    

Оба могут быть доступны в файле с кодом:

    MyTitle.Text = "Title from Code behind";
    Page.Title = "Page Title from CS";

И я нашел, что директива page переопределяет заголовок html. Итак, какой из них мы должны использовать и почему?

    
задан Arshad 07.10.2013 в 14:04
источник
  • Вы прочитали документацию ASP.NET по заголовку? –  xdumaine 07.10.2013 в 14:13

3 ответа

9

Самое большое различие заключается в том, что с MyTitle.Text вам нужно украсить элемент Title атрибутами id AND runat и запомнить его имя, чтобы вы могли ссылаться на него. Также доступ к этому значению не так просто с дочерних страниц, когда вы используете Masterpage, например.

С другой стороны, Page.Title является общим для каждой страницы, поэтому, на мой взгляд, он более универсален. Каждый новый разработчик, с которым вы будете работать, не должен будет ничего узнавать, просто используйте формат Page.Title ..

Итак, мой голос пойдет на «традиционный» Page.Title

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

    
ответ дан walther 07.10.2013 в 14:09
  • Этот сайт не посвящен «Голосованию» («Мой голос», как вы говорите). вы должны предоставить ответ на основе фактов / источников / кода / документов. –  Royi Namir 07.10.2013 в 14:31
  • @RoyiNamir, вы знаете, что окончательного ответа на этот вопрос нет. Оба варианта работают нормально. Я описал оба варианта и сказал, что я предпочитаю. Что плохого в этом? Вы действительно хотите играть словами? –  walther 07.10.2013 в 14:35
  • И я нашел, что директива page переопределяет заголовок html ..... Ответ должен объяснить, почему. (это то, что оп спросил на самом деле) –  Royi Namir 07.10.2013 в 14:36
  • Дорогой сэр. Возможно, вам стоит перечитать вопрос. Это совершенно ясно: так, какой из них мы должны использовать и почему? Я сказал, какой из них, и я сказал, почему. Если у вас есть какие-либо проблемы с этим, не стесняйтесь ниспровергать, сообщать, что угодно. Или, может быть, дайте ответ себе, чтобы вы показали нам, как мы ошибаемся. –  walther 07.10.2013 в 14:39
  • Если вы хотите поговорить, у нас здесь чат и много нетерпеливых людей. Не стесняйтесь использовать его, если вам скучно, потому что это никуда не годится. Ничто конструктивное не приходит от вас, и вы не хотите читать правильно. –  walther 07.10.2013 в 14:44
6

Короткий ответ: (это зависит от ваших потребностей). я объясню.

  • Это зависит от того, будет ли ваш заголовок изменен во время выполнения.

Длинный ответ:

Вот мое наблюдение (с небольшим тестом):

Я устанавливаю title в Page directive :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="Exampales_test" Title="ppppppppp" %>

Я также устанавливаю через html :

<head runat="server" ID="hhh">
     ...
    <title runat="server">fffffffff</title>
</head>

У меня есть этот тестовый код:

 protected override void OnPreInit(EventArgs e)
    {
     // <-----  breakpoint here (A)
        base.OnPreInit(e);
     // <-----  breakpoint here (B)
    }


protected void Page_Load(object sender, EventArgs e)
{ // <-----  breakpoint here (C)
    this.Title = "cccccccc";
}

Visual:

Теперь посмотрим:

Когда я нажимаю Run :

Страница имеет значение html title ( ffffff )

Также в конце PreInit

Исследование OnInit показывает, что он изменил уже (в том смысле, что {если вы хотите точно знать, на каком этапе - это можно сделать)), чтобы ppppppppp

И, конечно, последним событием (среди того, о чем мы говорили) является page_load : он меняет значение:

И значение:

Итак, что выбрать?

Если ваш код меняет Title динамически (я имею в виду время выполнения ), не используйте разметку html вообще или директиву страницы.

например. если ваш код (например) имеет ASCX и что ACSX должен изменить заголовок, тогда просто используйте код (не директиву или HTML-разметку).

Как вы уже заметили - значение, которое выигрывает, - это тот, кто встречается последним (временная шкала)

Он начинается с значения разметки html, но затем код на стороне сервера начинает активироваться и изменяет значения.

    
ответ дан Royi Namir 07.10.2013 в 15:02
  • Не имеет значения, «что происходит в самом конце», но только тот, который вы на самом деле используете. Это действительно ошибочное мнение. Все, что вы показали, это последовательность обработки страницы asp.net без реальной ценности (если только вы не имеете дело с шизофреником, который использует все подходы в одном приложении). Один из унифицированных способов настройки заголовка сводит на нет ваш «вывод» ... –  walther 07.10.2013 в 15:08
  • @walther это одно и то же. если вы используете только одно место, тогда нет кода, который позже переопределяет значения. мой тест показывает, как значение изменяется в жизненном цикле страницы с самого начала. теперь OP должен знать, что если требуется динамическое название, то он должен быть установлен через код на более позднем этапе и не использовать тег заголовка разметки HTML. –  Royi Namir 07.10.2013 в 15:09
0

Вот хорошая статья о различиях. Они в основном делают то же самое. Это просто ЧТО вы хотите это сделать.

  

Пока <title> можно установить статически на веб-странице ASP.NET, в   во многих сценариях название зависит от данных, отображаемых в   стр. Например, веб-сайт может иметь   ShowProduct.aspx? ID = productID. Вместо использования статического    <title> , значение <title> в идеале должно быть именем   (то есть продукт, ProductID которого равен   значение productID, прошедшее через запрос). К сожалению, в   ASP.NET версии 1.x, устанавливая любые элементы метаданных HTML (например,    <title> ), необходимо, чтобы разработчик добавил элемент управления Literal в   надлежащее место в разметке HTML, а затем установить его значение   программным способом в классе кода для ASP.NET.

Скопировано здесь Ссылка

    
ответ дан Anthony Russell 07.10.2013 в 14:12
  • Отредактировал его так, чтобы угловые скобки <> были видны в цитате, иначе это было немного странно читать. Я думаю, что у меня есть все. –  Damien_The_Unbeliever 07.10.2013 в 14:34
  • @Damien_The_Unbeliever бесполезная причина. По-видимому, другие ответы более ценятся. –  Anthony Russell 07.10.2013 в 15:56