gpt4 book ai didi

c# - 帮助 ASP.NET MVC HtmlHelper API 设计

转载 作者:太空狗 更新时间:2023-10-29 20:25:43 26 4
gpt4 key购买 nike

我正在为 ASP.NET WebForms/MVC 开发运行时复合资源库。我通过 WebControls 支持标准的 ASP.NET WebForms,并且最近还添加了对 ASP MVC Html Helpers 的支持。我目前支持 WebForms WebControls 的一个功能是“部分”资源定义的概念,其中可以在主/ 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>

因此任何 View 页面都可以扩展部分资源定义,如上所示。

我的问题:

1) 与我的所有其他 HtmlHelper 不同,这些扩展不会立即写出 HTML 片段,而是等到上下文被释放。这些扩展是否应该脱离 ViewContext(或其他一些对象)?

2) 我个人认为“使用”的概念对于包装代码块而不是单独的 BeginCompositeResourcePartContext/EndCompositeResourcePartContext 调用是有意义的,您同意吗?如果不是,单独的方法调用有什么更好的?

如有任何反馈,我们将不胜感激。如果需要更多详细信息,请告诉我。

编辑

要澄清...母版页头部内的 block 和 View 页面侧的后续引用将组合在一起成为一个资源。因此,当 CompositeResourcePartContext 的上下文被释放时,所有六个文件将合并到一个 css 文件中,并作为单个链接标签(或脚本、css sprite 等)写出

<link rel="stylesheet" type="text/css" href="/MyMergedStyleSheet.css" />

最佳答案

经过更多考虑(并咨询同事)后,我觉得最好的选择是坚持我最初的计划,即不使用“部分”资源定义(适用于 WebControls)的概念污染我的 ASP.NET MVC API ,但在我看来 MVC 没那么好)。在考虑在我的库中针对这种情况使用显式 HtmlHelper 扩展之前,我建议可以通过定义自定义扩展方法来处理该问题,如下所示:

public static class CustomXpediteExtensions
{
private static readonly IEnumerable<String> SharedCss = new[]
{
"/Styles/SharedStyle1.css",
"/Styles/SharedStyle2.css",
"/Styles/SharedStyle3.css"
};

public static MvcHtmlString CustomCompositeCssResource(this HtmlHelper htmlHelper, params String[] resources)
{
return htmlHelper.CompositeCssResource(SharedCss.Concat(resources));
}
}

然后在 View 页面中简单地引用该自定义扩展(或常量等)。

<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server">
<%= Html.CustomCompositeCssResource(
"/Styles/PageStyle5.css",
"/Styles/PageStyle6.css",
"/Styles/PageStyle7.css"
) %>
</asp:Content>

这将使您在合并共享资源时不重复自己(即确保一致性)并最终处理案例。

我会把这个打开一段时间,看看是否有任何反馈;但除非有充分的理由说明为什么这是 Not Acceptable ,否则我认为这就是答案。

关于c# - 帮助 ASP.NET MVC HtmlHelper API 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com