我使用模板根据不同的页面加载不同的css样式,但加载第一次时候能正常加载,但在点击此页面却无法加载css样式
MasterPage.master前台代码:
<form id="form1" runat="server">
     <link href='<%=thecss %>' rel="stylesheet" type="text/css" />
MasterPage.master后台代码:
public static string thecss;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
   断点         string strurl = "";
            strurl = System.IO.Path.GetFileName(Request.PhysicalPath);
            string[] temp = strurl.Split('.');
            thecss = "images/" + temp[0].ToString().Trim() + ".css";
        }    }
使用断点跟踪发现第二次根本不执行
不知道怎么解决,或者各位大虾有没好的解决方法或其他的方法加载页面

解决方案 »

  1.   

    把     string strurl = ""; 
                strurl = System.IO.Path.GetFileName(Request.PhysicalPath); 
                string[] temp = strurl.Split('.'); 
                thecss = "images/" + temp[0].ToString().Trim() + ".css"; 
    放在 if (!Page.IsPostBack) 的外边
      

  2.   

     用MasterPage.master的话一般都在其子页里的page_load里写:
    link.Href = "CSS/Css.css";
    link.Attributes["rel"] = "stylesheet";
    link.Attributes["type"] = "text/css";
    this.Page.Header.Controls.Add(link);
      

  3.   

    1. 第一种,使用HtmlLink加载要动态加载内容中的样式表,先要将link设置成服务器控件,并通过在后台动态绑定link标签的href,从而实现动态加载内容页的样式表。
    母版页://母版页中的href可写可不写,但要在link标签里面加上runat="server",并设置link的id以便在后台在能调用
    内容页:
    HtmlLink css = Master.FindControl("css") as HtmlLink;
    css.Href = stylesheet;
    //其中stylesheet是该内容页的样式表的地址,是相对于根目录的地址。如根目录下的css文件夹里面的stylesheet.css,那么就要写上"css/stylesheet.css"。2. 第二种,使用PlaceHolder加载
          
            System.Web.UI.Control a = (PlaceHolder)Page.FindControl("myplaceholder");
            System.Web.UI.HtmlControls.HtmlGenericControl objLink = new HtmlGenericControl("LINK");
            objLink.Attributes.Add("rel","stylesheet");
            objLink.Attributes.Add("type","text/css");
            objLink.Attributes.Add("href","StyleSheet1.css");
            objLink=objLink;
            a.Controls.Add(objLink);
        } 
      myplaceholder这是placeholder控件是主要是起"占位符的做用"
    。把这一句话 objLink.Attributes.Add("href","StyleSheet1.css");
    改成objLink.Attributes.Add("href",dropdownlist1.SelectedValue);3. 第三种
    首先来说如何动态加载一个外部的CSS文件:(假设文件名为style.css)
    最没有技术含量的方法:
    document.write("");
    @import(style.css)
    这种方法只能用在外部CSS文件或style结点中,基本上不能算作是动态。在FF和IE中均可行。
    使用document.createStyleSheet()方法
    这个方法是IE only的,参数可以传递一个样式表中的值,如body{background: blue;}或者是一个外部CSS文件的URL,使用方法如document.createStyleSheet(style.css),此URL的地址相对于当前页面。
    动态创建link结点
    function LoadCss(cssUrl) {
      var link = document.createElement("link");
      link.rel = "stylesheet";
      link.type = "text/css";
      link.href = "cssUrl";
      document.getElementsByTagName("body").item(0).appednChild(link);
    }
    这个方法在FF和IE中均可以使用,当然同样的思路还可以来创建style结点,然后使用XMLHttpRequest方法来加载cssURL中的内容,并把创建的style结点的innerHTML设置成XMLHttpRequest的responseText,但由于我认为这是最不经济、最不合理的一种方法,所以在这也就不讲了。
    更新当前某个link结点
    思路同上,但是这种作法是替换掉一个已有的link标签,可以用于更换网站的Theme,基本代码如下:
    function ChangeTheme(cssUrl) {
      var theme = document.getElementByName("theme"); //假设存在id为theme的结点
      theme.href = cssUrl;
    }
    这种方法我测试过,在FF和IE中均可行。
    动态创建样式元素
    如果我想在网页上增加一个如下的CSS元素,应该怎么做呢?
    .focus {
      color: red;
      font-style: bold;
    }
    当然,我可以创建一个style结点,然后把上面这段内容放到innerHTML中,那有没有别的办法呢?到目前为止,我还不知道除了上面那个方法以处一个在FF和IE中均可行的方法。不过在IE中我们可以这样做:
    var sheet = document.createStyleSheet();
    sheet.addRule(".focus", "color: red; font-style: bold;");4.第四种,使用js实现var css;
    function include_css(css_file) {
      var html_doc = document.getElementsByTagName('head')[0];
      css = document.createElement('link');
      css.setAttribute('rel', 'stylesheet');
      css.setAttribute('type', 'text/css');
      css.setAttribute('href', css_file);
      html_doc.appendChild(css);
      css.onreadystatechange = function () {
        if (css.readyState == 'complete') {
            include_css("css/index.css")
        }
      }
      css.onload = function () {
          include_css("css/index.css")
      }
      return false;
    }
    散分