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

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

У меня есть собственный класс мастер-страницы, который выводитиз 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 в контейнере head означает, что кодовый блок в ссылке является статическим текстом и отображается в полученном html как есть.

Если я удаляю атрибут runat из head, 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-ссылок и добавьте их в элемент управления заголовка, но я подумал, что может быть более элегантное решение, поэтому сначала я задаю вопрос.

Ответы [ 2 ]

0 голосов
/ 09 марта 2011

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

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

0 голосов
/ 09 марта 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")

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

...