Как запретить веб-формам для маркетологов внедрять собственный jquery-ui.custom.Default.css

Я использую Веб-формы для маркетологов (WFFM) в проекте Sitecore, и я заметил, что он ввел:

<link href="/sitecore%20modules/shell/Web%20Forms%20for%20Marketers/themes/colors//jquery-ui.custom.Default.css" rel="stylesheet" type="text/css" />

Есть ли способ отключить ссылку, чтобы на страницу добавлялись только указанные мной файлы CSS?


Изучив больше исходников WFFM, я заметил, что нежелательные <link /> добавляются на страницу через Page.Header.Controls:

if (page.Header != null)
{
    if (!flag)
    {
        try
        {
            //possibly added as link, unless an exception is thrown
            page.Header.Controls.Add((Control) htmlLink);
            linkDictionary.Add(key, key);
            continue;
        }
        catch (Exception ex)
        {
            //added manually
            HtmlTextWriter writer = new HtmlTextWriter((TextWriter) new StringWriter(new StringBuilder()));
            htmlLink.RenderControl(writer);
            page.ClientScript.RegisterClientScriptBlock(typeof (Page), writer.InnerWriter.ToString(), writer.InnerWriter.ToString());
            flag = true;
            continue;
        }
    }
}

Это означает, что я мог бы проверить все элементы управления заголовком и скрыть тот, который содержит "jquery-ui.custom.Default.css", но это все еще похоже на грязный неприятный взлом (что так и есть). Он также не удалит ссылку в ситуациях, когда page.Header.Controls.Add вызовет исключение.


person zzzzBov    schedule 14.02.2012    source источник


Ответы (2)


Я декомпилировал WFFM, и, похоже, его нельзя настроить, чтобы изменить или отключить. Таким образом, один из способов обойти эту проблему — напрямую отредактировать этот файл и стереть его содержимое. Он по-прежнему будет загружен, но не будет включать CSS.

ОБНОВЛЕНИЕ

В соответствии с вашими обновлениями вы также можете попробовать что-то вроде этого:

Control ctl = WebUtil.FindControlOfType(Sitecore.Context.Page.Page, typeof(TYPE-OF-EXPECTED-CONTROL));

Где вы заменяете TYPE-OF-EXPECTED-CONTROL. Отсюда вы можете делать с ним все, что хотите, например. выясните, является ли это ссылкой для включения CSS и т. д.

person Mark Ursino    schedule 14.02.2012
comment
Я уже сделал это, но в любом случае это хороший совет. Я использовал dotPeek для проверки источника и нашел проверку в ThemesManager.AddScript, которая выглядит так, как будто ее следует добавлять только в том случае, если файл существует. К сожалению, удаление файла не помогает. Повторная компиляция, кажется, также возвращает файл, я не уверен, почему на данный момент, это может быть как-то связано с TDS. - person zzzzBov; 14.02.2012

Web Forms for Marketers фактически не добавит тег <link>, если таблица стилей отсутствует в файловой системе.

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

person zzzzBov    schedule 27.09.2012