我正在为ASP.NET WebForms/MVC开发一个运行时复合资源库。我通过WebControls支持标准的ASP.NET Web窗体,最近还添加了对ASP MVC HTML帮助程序的支持。我目前支持WebForms WebControls的一个功能是“部分”资源定义的概念,在该定义中,可以在主控页/视图页等上组合资源。
在实现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)与所有其他HTML助手不同,这些扩展不会立即写出HTML片段,而是等待上下文释放。这些扩展应该是离开viewContext(或其他对象)的吗?
2)我个人认为“使用”的概念对于包装一个代码块是有意义的,而不是分开beginConcositeResourcePartContext/endCompositeResourcePartContext调用,您同意吗?如果不是,那么单独的方法调用有什么更好的呢?
如有任何上述反馈,我们将不胜感激。如果需要更多细节,请告诉我。
编辑
澄清…母版页标题内的块和视图页侧的后续引用将合并到一个资源中。因此,当compositeResourcePartContext的上下文被释放时,所有六个文件只合并到一个css文件中,并作为一个链接标记(或script、css sprite等)写出。
<link rel="stylesheet" type="text/css" href="/MyMergedStyleSheet.css" />