ASP.NET使用母版页后动态加载JS/CSS

GD Star Rating
loading...

ASP.NET中使用母版页最大的好处就是当有许多相似的页面时只用加一个母版页,每个页面用这个母版页生成内容页,然后根据情况修改每个内容页中的内容,保持页面布局的统一,同时也减少了代码量。

但另一个突出的问题是使用母版页后,每个内容页中没有了<head></head>标记,因为这都在母版页中有了,而这对修改标题、加载JS/CSS等文件都有影响,前面我已经说过在ASP.NET中使用母版页后统一网页标题,那这篇就来说说如何加载JS/CSS等文件。

ASP.NET中使用母版页后统一网页标题中修改标题的原理一样,加载JS/CSS等文件可以在内容页中加,也可以在母版页中统一加载。

1、在单个内容页中加载

将下面两段段代码放入内容页的Page_Load中即可,很简单了,也不再多解释。

  • 加载JS文件
#region 加载JS文件
HtmlGenericControl JSControl = new HtmlGenericControl("script");
JSControl.Attributes.Add("type", "text/javascript");
JSControl.Attributes.Add("src", "JS/js.js");
Page.Header.Controls.Add(JSControl);
#endregion
  • 加载CSS文件
HtmlLink CssControl = new HtmlLink();
CssControl.Href = "/CSS/Style.css";
CssControl.Attributes.Add("rel", "stylesheet");
CssControl.Attributes.Add("type", "text/css");
Page.Header.Controls.Add(CssControl);

2、在母版页中统一加载

string requestContentType = this.ContentPlaceHolder1.Page.GetType().ToString();
if (requestContentType == "ASP.admin_c2c_user_management_aspx")//获取请求的内容页类型,格式如ASP.目录名_文件名_aspx(好像文件名中的“-”都会被转换成了“_”)
{
    //加载JS文件
    HtmlGenericControl JSControl = new HtmlGenericControl("script");
    JSControl.Attributes.Add("type","text/javascript");
    JSControl.Attributes.Add("src", "JS/js.js");
    Page.Header.Controls.Add(JSControl);
    // 加载CSS文件
    HtmlLink CssControl = new HtmlLink();
    CssControl.Href = "/CSS/Style.css";
    CssControl.Attributes.Add("rel", "stylesheet");
    CssControl.Attributes.Add("type", "text/css");
    Page.Header.Controls.Add(CssControl);
}

已有44条评论 发表评论

  1. maik /

    想问你一下,关于母版的问题,当我把母版设计好了后,左边有个a标签的导航,当点击a标签,就改变右边子页面的内容,同时a标签的样式我改变了一下,让它改为被选中状态,主要是用来达到醒目的效果。
    但是当我真正把子页面写好后,点击a标签时,右边是切换到了a标签url指定的地址,但是由于回发到了服务器,a标签的样式被丢失了,请问大虾,有什么好注意么,不让子页面的刷新影响到a标签的样式??

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      应该可以在母版页里判断下打开的是哪个内容页,然后给a标签设置样式,这个我也没有具体做过,只是有这么个思路,不知道好使不

      GD Star Rating
      loading...
      1. maik /

        呵呵,当子页面为空,然后应用该母版后,点击a链接,样式是可以改变的,当子页面里面有内容,就是子页面里有服务器组件时,它由于回发到服务器,把样式就恢复到了初始状态。。。

        GD Star Rating
        loading...
  2. 大树 /

    半年没用母版页了,很怀念……

    GD Star Rating
    loading...
  3. joyla /

    这个我纯支持!

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      拉住她~~ 赶紧,别让她跑啦~~

      GD Star Rating
      loading...
      1. joyla /

        没走 没走 这不还在吗?

        GD Star Rating
        loading...
  4. 番薯窝 /

    说虽然是这样,但是实现起来就很困难了

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      用的时候直接把代码粘过去就OK了~~

      GD Star Rating
      loading...
  5. 学夫子 /

    外行看热闹了,哈哈,看不懂的

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      哈哈,学了就懂啦~ :(17):

      GD Star Rating
      loading...
  6. Mars /

    .net就是强大,什么都是现成的。

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      嗯,.NET确实比较易于上手

      GD Star Rating
      loading...
  7. 蛋卷 /

    这个看以看不懂

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      学了.NET就懂啦~~ :(16):

      GD Star Rating
      loading...
  8. 先看看 /

    我也想这样做

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      那就这样做呗~~ :(4):

      GD Star Rating
      loading...
  9. laowi /

    完全不懂的人路过打酱油

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      加油!只要想懂,没什么搞不懂的 :(1):

      GD Star Rating
      loading...
  10. 记忆盒子 /

    .net用了好几年,身边没人说过”母版页”的名词,汗. 母版页就是”asp叉”页吧?我们都说在”asp叉”页添加某某控件.在”cs”页编写某某事件代码.

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      :(2): 不是啊。。。母版页的后缀是.Master ,用一个母版页可以生成很多内容页,内容页的后缀是.aspx

      GD Star Rating
      loading...
      1. 记忆盒子 /

        刚看了下,原来.net2005后引进了”母版”,汗!一直没有用过这个,.net2003用的多,项目也没有升级到.net2005或者.net2008. 然后又搞java什么的,看来真的跟不上知识更新的步伐呀!!!不过,更大原因是自己不去学习吧,哎………………net2005和.net2008学习中!

        GD Star Rating
        loading...
        1. 自由人 / 本文作者

          呵呵,我最开始用05的时候也没注意,然后做页面的时候发现很多页面就中间的一块内容不同,其他都一样,这才想起看书的时候有母版页

          GD Star Rating
          loading...
  11. 云崧 /

    这个专业了,我是非技术流,不大懂。

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      嗯嗯,这个记录下,方便以后参考

      GD Star Rating
      loading...
  12. 北街 /

    代码万岁~ :(16):

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      哈哈~~万岁~~

      GD Star Rating
      loading...
  13. zwwooooo /

    对asp一窍不通

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      我最初搞这个其实是被动的。。。 :(8):

      GD Star Rating
      loading...
  14. 小邪 /

    额,一般这个语言配什么数据库的?
    access还是mssql?

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      都可以的,MSSQL多些吧

      GD Star Rating
      loading...
  15. lenomon /

    还好,看得懂!! :(1):

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      呵呵,这几行很简单的,一看就懂

      GD Star Rating
      loading...
  16. 飞晏 /

    现在.NET里面使用母版页的页面有两个控件,第一个就是在页面中添加和中间的信息,可以实现不同的页面使用不同的JS

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      :(2): 好像没看明白

      GD Star Rating
      loading...
      1. 飞晏 /

        就是模板面中的区域有一个,区域有
        。这样使用模板页面的时候就可以分别在head和body添加内容了

        GD Star Rating
        loading...
        1. 飞晏 /

          就是母版页中的head区域有一个asp:ContentPlaceHolder id=”head” runat=”server”,body区域有asp:ContentPlaceHolder id=”ContentPlaceHolder1″ runat=”server”
          。这样使用母版页的时候就可以分别在head和body添加内容了

          GD Star Rating
          loading...
          1. 自由人 / 本文作者

            嗯,我最开始就这样搞的,在VS2005里会提示无法识别的标记前缀,但实际能用,08里好像他就给你在head中自动加了个contentplaceholder

            GD Star Rating
            loading...
  17. 园子 /

    ASP.NET 用着不是很熟练。

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      用着用着就熟了~~ :(4):

      GD Star Rating
      loading...
  18. ifenwen /

    有点复杂

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      其实很easy的

      GD Star Rating
      loading...
  19. 阅网博客 /

    :(4): :(4): 没用过dotnet

    GD Star Rating
    loading...
    1. 自由人 / 本文作者

      这个可以用的~~ :(1):

      GD Star Rating
      loading...

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.