Estoy trabajando en una biblioteca de recursos compuestos en tiempo de ejecución para ASP.NET WebForms/MVC. Respaldo tanto el WebForms ASP.NET estándar a través de WebControls y recientemente también he agregado soporte para ASP MVC Html Helpers. Una característica que soporto actualmente con WebForms WebControls es el concepto de definiciones de recursos "Parciales" donde un recurso se puede combinar en las páginas Master/View, etc.Ayuda con ASP.NET MVC HtmlHelper API Diseño
Al implementar el equivalente MVC, no estoy seguro de cuál es la mejor la práctica es? Actualmente estoy inclinando hacia un diseño algo como:
página maestra
<% using (Html.CreateCompositeResourcePartContext())
{
Html.CompositeCssResourcePart(
"ResourceName",
new[] { "/Styles/SharedStyle1.css", "/Styles/SharedStyle2.css" }
);
%>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
<% } %>
que creará un envoltorio de "contexto" alrededor de la cabeza ContentPlaceHolder.
Ver página
<asp:Content ID="HeadContentPlaceholder" ContentPlaceHolderID="head" runat="server">
<% Html.CompositeCssResourcePart(
"ResourceName",
new[]
{
"/Styles/PageStyle5.css",
"/Styles/PageStyle6.css",
"/Styles/PageStyle7.css"
}) %>
</asp:Content>
Así que cualquier páginas de vista puede extender la definición del recurso parcial, como se ha visto anteriormente.
las preguntas que tengo:
1) A diferencia de todos mis otros HtmlHelper, estas extensiones no escriben inmediatamente el fragmento de HTML, sino más bien esperar hasta que se dispone el contexto. ¿Deberían estas extensiones estar fuera del ViewContext en su lugar (u otro objeto)?
2) Personalmente creo que el concepto de "usar" tiene sentido para envolver un bloque de código en lugar de separar las llamadas a BeginCompositeResourcePartContext/EndCompositeResourcePartContext, ¿estaría de acuerdo? Si no, ¿qué hay de mejor con las llamadas a métodos separados?
Cualquier comentario sobre lo anterior sería muy apreciado. Si se requieren más detalles, házmelo saber.
Editar
Para aclarar ... el bloque dentro de la cabeza de la página Master y la posterior referencia en el lado de una página de vista se combinan juntos en un solo recurso. Así que cuando se dispone el contexto de CompositeResourcePartContext, los seis archivos se combinan en a sólo un archivo CSS y escriben como una sola etiqueta de enlace (o script, CSS sprites etc)
<link rel="stylesheet" type="text/css" href="/MyMergedStyleSheet.css" />
No estoy seguro de qué le compra este ayudante. ¿No es eso para lo que están los marcadores de posición de contenido en primer lugar? –
@John: la idea es que cada llamada a Html.CompositeCssResourcePart definirá una parte de un recurso compuesto (es decir, se fusionará en un único archivo cuando se elimine el contexto). Como tal, necesito un método para recopilar todas las partes antes de que se pueda representar una etiqueta de enlace/script a medida que se genera la URL de todos los recursos a los que se hace referencia. ¿Tiene sentido? –
'usar' tiene sentido en este contexto, pero no puedo comentar más allá de eso. –