Ответ 1
http://www.codeproject.com/Articles/38542/Include-Stylesheets-and-Scripts-From-A-WebControl-.aspx
В этой статье содержится информация об переопределении HttpContext.Response.Filter, которая отлично поработала для меня.
Я использую ASP.NET MVC, и у меня есть частичный элемент управления, которому нужен конкретный файл CSS и JS. Есть ли способ сделать родительскую страницу визуализацией тегов script
и link
в разделе "head" на странице, а не просто сделать их встроенными в частичный contol?
Чтобы прояснить элемент управления, который я хочу включить в файлы, отображается из представления с помощью Html.RenderPartial
и поэтому не может содержать на нем элементы управления на стороне сервера. Я хочу включить файлы в раздел html head
, чтобы избежать ошибок проверки.
http://www.codeproject.com/Articles/38542/Include-Stylesheets-and-Scripts-From-A-WebControl-.aspx
В этой статье содержится информация об переопределении HttpContext.Response.Filter, которая отлично поработала для меня.
Если у меня есть требования к CSS/Javascript в частичном представлении, я просто убеждаюсь, что любая страница, которая может включать частичное представление, прямо или как содержимое, полученное из AJAX, содержит CSS/Javascript, включенные в его заголовки. Если страница имеет главную страницу, я добавляю заполнитель содержимого в заголовок главной страницы и заполняю его на дочерней странице. Чтобы получить intellisense в частичном представлении, я добавляю, что CSS/Javascript включает в частичное представление, но завернутый блоком кода if (false)
, поэтому они не включены во время выполнения.
<% if (false) { %>
<link href=...
<script type=...
<% } %>
Перед частичной линией рендеринга вызовите @import
следующим образом:
<style type="text/css>
@import url(cssPath.css);
</style>
Надеюсь, что это поможет.
Просто наткнулся на эту опцию на Haacked и вспомнил ваш вопрос. Используйте заголовок Content
placeholder на частичном представлении и просто добавьте CSS в эту форму как обычно.
Если вы готовы нарушить соответствие, вы можете просто исправить определение стиля с частичным контентом. Это работает в большинстве браузеров.
В зависимости от того, сколько CSS/JS вам нужно для управления, самым безопасным маршрутом может быть просто включение дополнительного стиля в ваши основные файлы CSS. Сохраняет дополнительную поездку на сервер, и все должно быть кэшировано клиентом. Я знаю, что это убивает самодостаточность (монета фразы) контроля, но это может быть вашим лучшим выбором.
Извините, вы не можете от частичного контроля ссылаться "вверх" на что-то на родительской странице (или добавить что-нибудь). Единственное сообщение "вниз" от родителя к частичному, передавая ViewData/Model.
Вы описываете функциональные возможности главной страницы и обычной страницы с использованием держателей содержимого, но частичные элементы управления не работают так.
Но, если я не ошибаюсь, вы можете просто физически добавить теги script или ссылку на фактическую родительскую страницу, на которую вы показываете частичную страницу, - CSS должен также использоваться на частичной странице.
Тодд-ответ работает отлично, если у вас есть только один экземпляр элемента управления, и нет другого кода, который хочет "ввести" что-либо в тег для главной страницы. К сожалению, вы редко можете полагаться на это.
Я бы предложил вам включить все необходимые файлы css на главной странице. В первом посещении будет небольшой перфоманс, но после этого будет активировано кэширование браузера. Вы можете (и должны) разделить свои стили в нескольких файлах .css, чтобы извлечь выгоду из агентов HTTP, которые могут их загрузить. Что касается файлов .js, я бы предложил реализовать что-то близкое к механизму google.load()
, что позволит вам загружать скрипты по запросу.
Я новичок в MVC... Недавно у меня была проблема. Я использовал страницу просмотра MVC вместо частичного представления, добавил свою собственную главную страницу (потому что у меня есть css, который разделен на несколько просмотров) и добавлен css для управления. Надеюсь, эта информация поможет.
Включите держатель места в шаблоне мастера:
<head runat="server>
<asp:ContentPlaceHolder ID="head" runat="server" />
</head>
и в вашем управлении
<asp:Content ID="head" runat="server">
<script src="something.js"></script>
</asp:Content>