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

    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);
    }
    
  • ASP.NET使用母版页统一网页标题

    在做网页的时候给每个网页设置一个合理的标题是很有必要的事情,而做一个网站的时候需要将所有的标题的格式统一起来,比如将所有网页的标题统一为“XX页面 | XX网站”。

    我在用VS2005做的时候开始没用母版页,后来用母版页的时候发现改内容页的标题其实挺麻烦的,因为每个内容页都要设置标题,而每个标题中都要有网站的名字。如果手工给每个内容页加上该内容页的标题,再加上网站名字,岂不是很麻烦?好在我们用的是动态语言,至少网站名字可以在母版页中直接统一起来。

    下面说下我用的两种方法改写网页标题。

    1、所有的网页标题设置为“XX页面 | XX网站”。

    这种方法很简单,只用在母版页的xx.aspx.cs文件中写上这样一句代码(BasePage.GetSiteName()为获取网站标题的方法)

    Page.Header.Title += " | " + BasePage.GetSiteName();//设置前台页面所有内容页标题

    然后在每个内容页中加上内容页的标题就OK了。

    2、在母版页中改写所有内容页标题

    这样做的好处是如果要修改标题的内容页有很多,那么只用修改母版页就OK了,内容页中的标题可以不用管。这种方式的原理是先判断是哪个内容页请求的母版页,然后根据内容页的文件名来强制改写内容页的标题。

    这种方式下可以用if else判断,也可以用switch case来做

    A、如果只是首页的格式不同(比如首页的标题是“欢迎光临XX网站”,而其他页面都是“XX页面 | XX网站”)

    那么用母版页中xx.aspx.cs用这段代码,其中ContentBox为在母版页中的一个ContentPlaceHolder控件。

    string requestContentType = this.ContentBox.Page.GetType().ToString();//获取请求的内容页类型,格式如ASP.文件名_aspx
    if (requestContentType == "ASP.index_aspx")
    {
        Page.Header.Title = "欢迎光临" + BasePage.GetSiteName();
    }
    else
    {
        Page.Header.Title += " | " + BasePage.GetSiteName();//设置前台页面所有内容页标题
    }
    

    这段代码先判断内容页是不是首页(所有aspx文件名都被转换成形如“ASP.文件名_aspx”,首页文件名为indxe.aspx ,所以就被转成 ASP.index_aspx),然后根据结果改写标题。

    B、如果大部分网页的标题格式都不同或需要在母版页改写所有内容页标题

    string requestContentType = this.ContentBox.Page.GetType().ToString();//获取请求的内容页类型,格式如ASP.文件名_aspx
    
    switch (requestContentType)
    {
        case "ASP.A_aspx" :
        {
            Page.Header.Title = "A的网页标题";
            break;
        }
        case "ASP.B_aspx":
        {
            Page.Header.Title = "B的网页标题";
            break;
        }
        case "ASP.C_aspx":
        {
            Page.Header.Title = "C的网页标题";
            break;
        }
    }
    

    当然应该还有别的方法来改写网页标题,这只是我目前用到的两种,也不一定是最好的。

  • ASP.NET学习记录(1)

    有几天都没冒泡了,今天有空就记录下这两天学习ASP.NET的状况吧,虽然还是很菜,但还感觉有进步,呵呵。

    1、验证码控件

    ASP.NET中有许多现成的控件,不过验证码的暂时还没发现,在网上搜了下,发现一个叫AutoAuthCode的还不错就直接拿来用了。

    下面是该控件的几种样式





    这个控件总体来说还是不错的,里面有不少属性可以使用,还有两个公共方法,不过由于他已经封装,里面用的是table布局,改起来样式不够方便。

    更多信息大家可以去这里看看,上面说的很详细(里面有下载地址):http://blog.szu.edu.cn/Forum/61639

    2、三层架构 

    说实话,三层架构到底该是什么样子我说不清楚,看一个教程就会有一种说法,而且好像都说的通。

    照我看来三层架构的目的是分层,使每一层的信息相对独立。每一层只和他相邻的层交换信息,这个我认为是三层架构的重点所在。

    三层架构虽然复杂了些,但是好处还是突出的。

    3、web.config文件

    Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息。

    想了解web.config的更多信息我建议你看看周金桥的这篇文章,讲解比较详细 web.config详解收藏-周金桥

    4、使用母版页后内容页中head问题

    ASP.NET使用母版页可以让页面布局保持一致,但另外一点不方便的是每个内容页中没有了head标签。

    想改标题?没问题,内容页中的@Page 里面有个Title,这个就是标题了。

    另外head标签中还要很多meta,如果要修改的话可以看看这篇文章 在asp.net 2.0中结合母板页使用meta标签

    5、延时X秒后跳转到某一页面

    这个功能还是比较实用的,我这里有两种很简单的方法。

    A、利用head中的meta

    <meta http-equiv=”refresh” content=”5;url=http://www.zenoven.com”/>

    其中5就是5秒,后面URL就是跳转的页面

    B、利用JS

    <script language=”javascript” >
                                    function goto() 
                                    { 
                                    window.location.href=”index.aspx”; 
                                    } 
                                    setTimeout(“goto()”,5000);  //5秒后跳转到首页
     </script>