2009-11-28 4 views
1

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

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

Я думаю, что я должен использовать 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(...); 
+0

Ваш псевдо-код просто отлично. – jfar

ответ

0

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

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

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

  1. Masterpage (Одно место для вас, чтобы управлять CSS файлов)
  2. Theme (Все файлы CSS связаны автоматически один раз в запросе страницы)
  3. Код standandisation
  4. одного пользовательского элемента управления в заголовке для всех страниц (необходимо убедиться, что пункт 3 находится в месте)

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

1

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

foreach(HtmlControl control in this.Header.Controls) 
    { 
     if (control is HtmlLink && control.Attributes["href"] == this.CssFileLinkHref) 
     { 
      pageAlreadyContainsCssLink = true; 
      break; 
     } 
    } 
Смежные вопросы