Как зарегистрировать скрипты и таблицы стилей на уровне контроллера - PullRequest
0 голосов
/ 26 июля 2010

Я хочу иметь возможность регистрировать скрипты и таблицы стилей. Эти элементы будут добавлены в раздел заголовка текущей страницы. Например, у меня есть частичное представление, называемое ImageViewer, которое отображает несколько изображений и использует скрипт. Вместо добавления этого сценария в представление с использованием ImageViewer, я хотел бы иметь возможность зарегистрировать этот сценарий в методе действия частичного представления.

Есть ли стандартный способ сделать это?

Если нет, как я мог бы сделать это сам? Жизненный цикл приложения MVC, кажется, не облегчает это. Я попытался реализовать его, выполнив итерацию по коллекции скриптов / таблиц стилей в коллекции TempData, а затем создав методы RegisterScript и RegisterStyleSheet для добавления информации.

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

Как вы собираетесь реализовать такое поведение?

Ответы [ 2 ]

2 голосов
/ 26 июля 2010

Общий подход (как указал Jamiec) состоит в том, чтобы включить ContentPlaceHolder в раздел head вашего основного шаблона.

Если, однако, вы хотите, чтобы ваш контроллер решал, какой CSS будет отображаться (возможно, для создания тем или чего-то подобного), вы также можете создать помощник HTML для этого. Быстрая и грязная реализация для иллюстрации:

Главная страница:

<head runat="server">
    <%= Html.IncludeStyles() %>
</head>

Метод действия:

public ActionResult SomeAction()
{
    ViewData["StyleSheets"] = new[] { "StylesheetA", "StylesheetB" };
    return View();
}

HTML Helper:

public static class HtmlHelperExtensions
{
    public static string IncludeStyles(this HtmlHelper helper)
    {
        var styles = helper.ViewData["StyleSheets"] as IEnumerable<string>;
        var sb = new StringBuilder();

        if (styles != null)
        {
            foreach (var style in styles)
            {
                sb.AppendFormat("<link rel=\"stylesheet\" href=\"/content/" + style + ".css\" />\n");
            }
        }

        return sb.ToString();
    }
}
1 голос
/ 26 июля 2010

Я сделал это, используя ViewMasterPage с ContentPlaceholder в разделе head, позволяя моим частичным представлениям определять скрипты / таблицы стилей / все, что будет включено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...