加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 在ASCX自定义控件中放置CSS规则的位置?

发布时间:2020-12-16 07:11:56 所属栏目:asp.Net 来源:网络整理
导读:我是ASP.NET新手,但我正在开发一个自定义控件,里面有一个多视图控件,显示了一堆不同的东西.其中一些使用 JQuery UI元素(如制表符和手风琴)显示,这些元素将进行相当多的自定义. 由于我将有很多CSS规则仅适用于自定义控件中的元素(而不是我们网站的其他部分),
我是ASP.NET新手,但我正在开发一个自定义控件,里面有一个多视图控件,显示了一堆不同的东西.其中一些使用 JQuery UI元素(如制表符和手风琴)显示,这些元素将进行相当多的自定义.

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

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

任何人都可以提出我应该如何做到这一点? ASP.NET中Web开发的最佳实践是什么?

解决方法

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

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

只需选择您的文件|然后proeprties并更改其Build Action属性并将其设置为:embedded Resource

在以下代码中:

> 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页面中,您需要将标题部分标记为服务器控件

<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),string.Empty
                    );

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读