3

我们主要在工作中使用 ASP.NET 环境。现在,我正在构建一个使用“模块”的应用程序,它只是一个用户控件,它的 Javascript 就在控件中,以及一个指向该控件样式表的链接元素。我想让它保持模块化,并希望这个控件的样式独立于标记/javascript。

所以我想知道这样做的首选方法是什么?显然,如果我不想要我所追求的“主题”功能,我可以只使用控件顶部的样式标签。正如我所说,现在我有一个链接元素,我认为这不合适。

有没有人有任何首选的方法,如果有,是什么以及为什么?


我简要地考虑了 ASP.NET 主题,但我认为这些控件的想法有些不同。

它基本上是一个购物车系统。我不想深入探讨,但我们正在使用一个非常简洁的安全系统,我们不想使用预制的购物车。我正在开发一组可以放在页面上的控件,例如在 SiteFinity(这是我们使用的 CMS 系统)或我们可能拥有的任何其他项目中。通常我会将它们编译成一个 DLL,这样我们就可以从工具箱中拖放 ACTUAL 控件,然后我可以使用内部“通用”样式并允许任何人可能想要的附加样式,以及提供一些更高级的样式作为好。

这是我第一次这样做,或者真的是我们店里的第一次有人这样做,所以我一边走一边想办法。我可能离基地很远,但希望我不是。


对,这样做的想法是有一个“主题”,它实际上只是一个 CSS 文件和一个 jQuery 模板。我让它们命名相同,并在用户控件上有一个 Theme 属性来设置它。

当这些控件最终确定时,我可能会将 javascript 重构为代码隐藏上的 RegisterScriptBlock,但现在它们只是在控件本身的脚本标记中。

引发这个问题的是 IE 的 DebugBar,它警告我在 div 中不允许链接元素。我不太在乎,但是在考虑之后,我不知道如何链接到css文件而不这样做。我曾考虑过在主节点上有一个“空”链接标签,然后在 UserControl 的 Page_Load 后面的代码中设置它,但这看起来很糟糕。

我想我可以使用@import,但我认为链接标签是首选,对吗?

4

4 回答 4

2

我认为您应该做的是使用 Page.RegisterScriptBlock 来注册您的脚本块。最好的情况下,您不应该将它们内联在脚本块内的 ascx 中。这并不总是可能的,但理论上这是最好的方法。

理想情况下,您的样式也应该与您的标记分开。您的控件可以具有类和 ID,但您的样式基于您的应用程序而不是您的控件。理论上,控件可以在您可能需要不同样式的其他应用程序中使用。

于 2008-10-24T20:10:43.323 回答
2

听起来您正在推出自己的主题引擎......为什么不使用 ASP.NET 主题?

如果您决定自己动手,这里有一些您可能感兴趣的CssFriendly 项目的代码。(我认为只要我引用它的来源就可以发布代码。).css 文件被标记为嵌入式资源,下面的代码用于根据需要包含它们。

string filePath = page.ClientScript.GetWebResourceUrl(type, css);

// if filePath is not empty, embedded CSS exists -- register it
if (!String.IsNullOrEmpty(filePath))
{
    if (!Helpers.HeadContainsLinkHref(page, filePath))
    {
        HtmlLink link = new HtmlLink();
        link.Href = page.ResolveUrl(filePath);
        link.Attributes["type"] = "text/css";
        link.Attributes["rel"] = "stylesheet";
        page.Header.Controls.Add(link);
    }
}
于 2008-10-26T04:01:59.137 回答
1

这取决于您的应用程序有多大,以及它是否依赖于其他地方的主题,恕我直言。

如果您使用的是 .skin 文件,或者应用程序的大部分内容也插入了主题,那么您不妨选择主题。

但是,如果您只需要几个样式,最好手动设置样式表,将 css 文件保持在外部(内联样式是 PITA,破坏了 css 的核心目的之一)。

无论哪种情况,都不要忘记在控件上设置 CssClass 属性。

于 2008-10-24T20:09:30.097 回答
1

为了正确起见,我将有一个 import.css 文件 - 构造类的命名以遵循您的控件,并在文档的标题中导入样式。

如果您有一个名为“30DayPricingCalc”的模块,那么您可以命名类/ID:

30DayPricingCalc.css

.30daypricingcalc_main_content
{
  ...
}

另外,如果您还没有,我会设置一个通用可重复使用样式列表以节省您的空间。因为元素将允许每个对象有多个类。

此外,链接标签现在的重要性比以前少了很多。我们已经不再支持 IE5 一代浏览器,而 IE6 支持 @import 标记。

干杯!

于 2008-10-27T16:11:29.677 回答