Я работаю над составной библиотекой ресурсов среды выполнения для ASP.NET WebForms / MVC. Поддерживаю оба стандартных ASP. NET WebForms через WebControls, а также недавно добавили поддержку ASP MVC Html Helpers. Одной из функций, которую я в настоящее время поддерживаю с помощью WebForms WebControls, является концепция «частичных» определений ресурсов, в которой ресурс может быть объединен на страницах Master / View и т. Д.
При реализации эквивалента MVC я не уверен, что лучше всего использовать является? В настоящее время я склоняюсь к созданию чего-то вроде:
Главная страница
<% using (Html.CreateCompositeResourcePartContext())
{
Html.CompositeCssResourcePart(
"ResourceName",
new[] { "/Styles/SharedStyle1.css", "/Styles/SharedStyle2.css" }
);
%>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
<% } %>
, которая создаст «контекстную» оболочку вокруг заголовка ContentPlaceholder.
Страница просмотра
<asp:Content ID="HeadContentPlaceholder" ContentPlaceHolderID="head" runat="server">
<% Html.CompositeCssResourcePart(
"ResourceName",
new[]
{
"/Styles/PageStyle5.css",
"/Styles/PageStyle6.css",
"/Styles/PageStyle7.css"
}) %>
</asp:Content>
Таким образом, любые страницы просмотра могут расширять частичное определение ресурса, как показано выше.
У меня есть вопросы:
1) В отличие от всех моих других HtmlHelpers, эти расширения не сразу записывают HTML фрагмент, а лучше подождите, пока контекст не будет удален. Должны ли эти расширения быть за пределами ViewContext (или какого-либо другого объекта)?
2) Я лично считаю, что концепция «использования» имеет смысл заключать в оболочку блок кода, а не отдельные вызовы BeginCompositeResourcePartContext / EndCompositeResourcePartContext, вы согласны? Если нет, что лучше в отдельных вызовах методов?
Мы будем очень благодарны за любые отзывы по вышеизложенному. Если требуются более подробные сведения, пожалуйста, дайте мне знать.
Изменить
Чтобы уточнить ... блок внутри заголовка главной страницы и последующая ссылка сбоку от страницы просмотра будут объединены вместе в один ресурс . Поэтому, когда контекст CompositeResourcePartContext удаляется, все ШЕСТЬ файлов объединяются в только ОДИН файл css и записываются как тег с одной ссылкой (или скрипт, css sprite и т. д.)
<link rel="stylesheet" type="text/css" href="/MyMergedStyleSheet.css" />