ASP.NET: перечисление элементов заголовка из кода - PullRequest
1 голос
/ 28 ноября 2009

На Page_Load() в коде, я бы хотел перечислить все теги <link>. Я хочу добавить <link> в файл CSS, если он не указан в разметке Page.

Как я могу это сделать?

Думаю, я смогу использовать LINQ для сбора элементов в заголовке, не так ли?

Вот мой псевдокод :

var pageAlreadyContainsCssLink = false;

foreach(var control in this.Header.Controls) {
    if (control.TagName == "link" &&
        control.Attributes["href"] == "my_css_file.css") {
        pageAlreadyContainsCssLink = true;
        break;
    }
}

if (pageAlreadyContainsCssLink) {
    // Don't add <link> element
    return;
}

// Add the <link> to the CSS

this.AddCssLink(...);

Ответы [ 2 ]

1 голос
/ 28 ноября 2009

Решение состоит в том, чтобы перечислить коллекцию Controls как элементы управления HtmlGeneric:

    foreach(HtmlControl control in this.Header.Controls)
    {
        if (control is HtmlLink &&  control.Attributes["href"] == this.CssFileLinkHref)
        {
            pageAlreadyContainsCssLink = true;
            break;
        }
    }
0 голосов
/ 28 ноября 2009

Да, ваш код должен работать. Однако эта ситуация должна управляться в корне, предотвращая ее возникновение, чтобы вам не нужно было что-то кодировать «на всякий случай», чтобы справиться с этим.

Ваш цикл проверен на наличие ссылки css и, если она существует, завершается. Что делать, если есть 2 или более вхождения? Вы хотите удалить дубликаты?

Я бы предложил использовать один или комбинацию из следующих:

  1. Masterpage (одно место для вас, чтобы управлять файлами CSS)
  2. Тема (Все CSS-файлы связаны автоматически ОДИН РАЗ за запрос страницы)
  3. Стандарт кода
  4. Один настраиваемый элемент управления в заголовке для всех страниц (необходимо убедиться, что элемент 3 на месте)

1 и 2 не применимо к ASP.NET 1.x, 3 и 4 относится ко всем.

...