目前正在做的四川移动项目中遇到了一个小小的问题:母版页引用的脚本的相对路径该怎么写
起因:对于这个相对路径是对于母版页还是对于内容页。答案是内容页,(母版页只是替换内容页),这样就遇到了一个问题:当内容页和母版页不在同一个目录下的时候,并且内容页也分别放在不同的文件夹下的时候,不同的内容页对于脚本引用的相对路径就有所不同。
提出问题:关于母版页MasterPage中引用JavaScript,CSS的问题,如果所有套用模板的页面都在同一个路径下,这个问题就不存在了。但是在实际中为了方面管理,往往会建立一些文件夹,将引用的MasterPage放到不同的文件夹下,这是在MasterPage引用的JS,CSS文件由于路径的问题,在套用母版页中的内容页面中不一定都能访问到。那这个问题该如何解决了
解决问题:通过自己的努力思考和网上的参考资料得到一些解决办法:
方法一:
string JSFile = "〈script language=\"javascript\" src=\"{0}\" type=\"text/javascript\">〈/script>";
Response.Write(string.Format(JSFile,ResolveUrl("~/Javascript/jquery.js")));
这个方法虽然可以快速解决问题,但是Response.Write是将脚本的引用写到了Html页面的开头,这就破坏了XHTML的格式,会带来各种存在的隐患,据资料:用ASP.net AJAX开发,发现很多Asp.net AJaxControlToolkit中很多控件不起作用了。后来发现说是由于Response.Write引起的结果。
方法二:
string JSFile = "〈script language=\"javascript\" src=\"{0}\" type=\"text/javascript\">〈/script>";
Page.Header.InnerHtml = string.Format(JSFile,ResolveUrl("~/Javascript/jquery.js"));
这种方法就可以实现而且可以很好的解决方法中的问题。
方法三:
HtmlLink link = new HtmlLink();
link.Href = string.Format(JSFile,ResolveUrl("~/CSS/base.css"));
link.Attributes["rel"] = "stylesheet"; link.Attributes["type"] = "text/css";
page.Header.Controls.Add(link);
这是注册样式的一种方法。
方法四:注册客户端脚本的方法,结合ASP.NET AJAX 中的ScriptManager控件来实现。
用ScriptManager,这是ASP.net AjaxConrolToolkit的一个控件,通过这个控件爱你可以很好的动态的根据所引用母版页的脚本路径,自动的把母版页中引用的相对于母版页中的路径转换成相对于所引用内容页的相对路径。