Производные от asp.net главные страницы, заголовки страниц и динамические ссылки css

Не уверен, действительно ли производная страница имеет отношение к проблеме, но наткнулась на интересную ошибку в коде, над которым я работаю в данный момент.

У меня есть собственный класс мастер-страницы, производный от System.Web.UI.MasterPage, поэтому его можно расширить дополнительными полезными свойствами.

Страница, которая использует эту главную страницу, имеет объявление вверху (обратите внимание на установленный заголовок страницы).

<%@ Page Language="C#" MasterPageFile="~/MasterPages/Landing.master" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="Index" Title="Welcome to the site" %>

Кроме того, главная страница имеет ссылки на таблицы стилей в заголовке, которые извлекаются из сети CDN, определенной в файле конфигурации.

<head id="Head1" runat="server">
    <link rel="stylesheet" type="text/css" href="<%= CDN %>/css/main.css" />
</head>

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

Если я удалю атрибут runat из головы, CDN будет работать, но теперь я замечаю, что заголовок больше не устанавливается. Если я отлаживаю и пытаюсь получить доступ к Page.Title в окне Immediate Window, я получаю исключение:

// Using the Title property of Page requires a header control on the page. (e.g. <head runat="server" />).

Итак, есть ли способ получить заголовок страницы из объявления, поместить мой собственный заполнитель заголовка в заголовок и установить его из кода программной части главной страницы или есть лучший способ динамически установить домен CDN для таблиц стилей? Я думаю, что единственный способ сделать это - создать весь тег (ы) ссылки html и добавить его в элемент управления заголовком, но я подумал, что может быть более элегантное решение, поэтому я Я сначала спрашиваю здесь.


person Andrew Johns    schedule 09.03.2011    source источник


Ответы (2)


Что касается CDN, мы создаем специальный метод Url.ResolveContentUrl (), который взаимодействует с нашей конфигурацией и указывает на правильные таблицы стилей (и любой другой статический ресурс) в зависимости от режима работы и т. Д. Таким образом, ваш разработчик и QA работают локально, тогда ваш продукция переходит в CDN с нулевым изменением кода.

Кроме того, вы должны поместить заполнитель контента в часть главной страницы. Это единственный способ летать.

person Wyatt Barnett    schedule 09.03.2011

На своей главной странице вы можете создать такую ​​процедуру:

Public Sub AddStyleSheetLink(ByVal fileName As String, Optional ByVal media As String = "all")
    Dim stylesheetLink As New HtmlLink
    With stylesheetLink
        .Attributes("href") = fileName
        .Attributes("type") = "text/css"
        .Attributes("rel") = "stylesheet"
        .Attributes("media") = media
    End With
    MasterHeader.Controls.Add(stylesheetLink)
End Sub

И в вашем Page_Init (страница, которая наследует вашу главную страницу), примерно так

CType(Master, MasterPage).AddStyleSheetLink(CND & "/css/main.css")

Вы можете динамически добавлять то, что вам нужно, не вмешиваясь в теги ‹head> и заголовок страницы.

person TheGeekYouNeed    schedule 09.03.2011