6

我是在 ASP.NET 中工作的新手,但我正在开发一个自定义控件,其中包含一个多视图控件,它显示了一堆不同的东西。其中一些是使用 JQuery UI 元素(如选项卡和手风琴)显示的,这些元素将具有相当多的自定义功能。

由于我将有很多仅适用于自定义控件内的元素的 CSS 规则(不适用于我们网站的其余部分),我想知道将 CSS 样式规则放在哪里。

我通常只是在站点根目录的某个地方放置一个样式表并从那里引用它。但是当我使用 ASP.NET 时,我觉得我应该将所有代码(包括 CSS、JS 等)放在自定义控件本身中。这感觉更“程序化”,将所有东西放在一起。

谁能告诉我应该怎么做?在 ASP.NET 中进行 Web 开发的最佳实践是什么?

4

2 回答 2

7

如果您正在创建的控件位于单独的程序集中,您可以将 CSS 文件嵌入到程序集中以使其可重用并从您的控件创建到这些文件的直接链接,然后在您的控件中注册它们以呈现为link标记。在您的页面中

注意:请记住,您需要将程序集中的 CSS 文件标记为嵌入式资源

只需选择您的文件 | 然后 proeprties 并更改其Build Action属性并将其设置为:嵌入式资源

在此处输入图像描述

在以下代码中:

  • AjaxEnabled.Web.UI表示程序集的命名空间

  • DefaultStyle.css表示嵌入的 CSS 文件名

以下代码示例显示了所需的步骤:(在您的自定义服务器控件中)

[assembly: WebResource("AjaxEnabled.Web.UI.DefaultStyle.css", "text/css")]

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        if (this.Page.Header != null)
        {
            if (!this.Page.ClientScript.IsClientScriptBlockRegistered("defaultCss"))
            {
                var link = new HtmlLink();

                link.Href = this.Page.ClientScript.GetWebResourceUrl(
                    typeof(YourControlType),
                    "AjaxEnabled.Web.UI.DefaultStyle.css"
                );
                link.Attributes.Add("rel", "stylesheet");
                link.Attributes.Add("type", "text/css");

                this.Page.Header.Controls.Add(link);
                this.Page.ClientScript.RegisterClientScriptBlock(
                    typeof(Page),
                    "defaultCss",
                    string.Empty
                );
            }
        }
    }

您需要ScriptManager在包含自定义控件的页面中添加控件的实例

<asp:ScriptManager runat="server" ID="sm"/>

在您的 ASPX 页面中,您需要将该header部分标记为服务器控件

<head runat="server">

以下代码:

link.Href = this.Page.ClientScript.GetWebResourceUrl(
                typeof(YourControlType),
                "AjaxEnabled.Web.UI.DefaultStyle.css");

直接呈现到嵌入在程序集中的 CSS 文件的链接


这个条件:

if (!this.Page.ClientScript.IsClientScriptBlockRegistered("defaultCss"))
...
this.Page.ClientScript.RegisterClientScriptBlock(
                        typeof(Page),
                        "defaultCss",
                        string.Empty
                    );

确保 CSS 在页面中仅呈现一次,即使您删除了多个控件实例

于 2012-07-12T04:47:05.943 回答
0

您应该输入您正在使用的页面。

为什么?

  1. 在页面上有多个控件的情况下,如果您将 style/js 应用到用户控件而不引用外部样式表或脚本,您将看到每个单独的控件都重复了许多 CSS/js 代码。
  2. 更好地管理代码。
  3. CSS的控件是页面而不是控件本身,所以同一个控件可以用于多个页面,可能需要不同的样式。
于 2012-07-12T05:09:19.363 回答