MVC HtmlHelpers: вы можете написать в заголовок страницы? - PullRequest
4 голосов
/ 18 марта 2011

Я программист веб-форм, который заинтересован в том, чтобы немного узнать о MVC. Я создал целый набор веб-элементов управления, которые могут напрямую обращаться к заголовку страницы и писать там что-нибудь. Например, если у меня есть элемент управления для отображения текстового поля с функцией выбора даты, он может получить доступ к заголовку страницы, чтобы автоматически добавлять ссылки на нужные ему файлы JavaScript и CSS. Мне это нравится, потому что мне лень думать о том, какие связанные файлы мне нужны. Ленивый программист - хороший программист, верно?

У меня вопрос, есть ли способ сделать это в MVC? То есть, для создания пользовательского HtmlHelper (например), который, наряду с отображением разметки элемента управления на странице, может отображать требуемый скрипт и теги ссылки в заголовке страницы?

Ответы [ 4 ]

4 голосов
/ 18 марта 2011

С MVC3 в ваших _Layout.cshtml (в основном главных страницах) вы используете @Render.Partial("Header", required: false)

Тогда вы можете использовать именованные разделы в ваших представлениях.

@section Header {
    @{ Html.MyHelper.GetResources(); }
}

@Html.MyHelper.DoSomething()

С required: false это означает, что MVC3 не выдаст ошибку, если представление не имеет именованного раздела для заголовка. Если вы хотите, чтобы ВСЕ страницы имели именованный раздел (например, хлебные крошки), вы можете использовать required: true (по умолчанию), а если представление не имеет @section Header, это приведет к ошибке.

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

Некий менеджер скриптов

Я нашел этот ресурс в интернете, который частично связан с вашей проблемой и, возможно, наиболее эффективен в этом отношении.

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

Простой ScriptManager для ASP.NET MVC

Подход к пользовательскому механизму представления

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

Custom ViewPage классовый подход

Вы также можете написать свои выигранные классы для представлений и частичных представлений.Таким образом, вы можете изменить способ рендеринга вида, который будет снова использовать некоторый словарь.Вы можете заполнить этот словарь с помощью Html вспомогательного метода расширения или создать пользовательский класс ViewUserControl, который будет иметь такую ​​функциональность.

Из трех, я полагаю, последний является самым простым и может писать внутри HEAD элемент.Вы также можете предоставить функциональность, которая будет объединять ресурсы.

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

Да, Telerik отлично справляется со своими регистраторами ScriptRegistrar и Stylesheet. Хорошей отправной точкой является документация веб-ресурса

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

В веб-формах у вас есть пользовательские серверные элементы управления, которые получают объект страницы и работают с ним? Asp.net mvc не имеет серверных элементов управления и объекта Page.

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

Но если вы хотите, вы можете создать метод расширения и использовать его в представлении или создать actionfilterattribute, который устанавливает несколько строк URL;

...