ASP.NET的模板页是一个很好用的功能,内容页调用母版页,可以使得整个网站具有统一的效果。但内容页调用母版页也会出现一些问题,主要是文件调用的路径问题。现在进行一个讨论:
见上代码,这是母版页调用CSS文件及JS文件的典型代码。当内容页与母版页在同一个目录时(一般母版页会放在网站根目录,因此,当内容页在根目录时),内容页一切正常。但当调用该母版页的内容页与母版页不在一个目录时,问题就出现了:你会发现CSS调用正常,但JS文件无法调用。原因是:使用link办法链入的CSS文件,无论内容页在任何地方,调用都是正常的,这个特性可以赞扬一下。但调用JS文件时,src调用的JS文件指的是母版页所在目录的子目录js下的h_nav_manu.js文件,如果内容页不在同一个目录,它就认为这个JS文件位于内容页下子目录js内,这样自然找不到。要使得任何位置的内容页都可以解析出母版页引用的JS文件,可以使用ResolveUrl方法,本方法建议对目前网站的虚拟根目录进行解析,如下图:
使用是因为HTML下不认识.NET的这个方法,所以需要用它指明,同时,这里使用了~/的网站虚拟根目录的方式结合ResolveUrl使用,这样,调用该母版页的内容页处在网站的任何目录下,都可以正常引用JS文件。
再来看看母版页出现的图片文件引用:
该图片是典型的HTML使用,其中id指的是CSS定义的id,在HTML中调用这个id定义。同样,内容页与母版页在同一目录时,图片显示正常;内容页与母版页不在一个目录下时,图片无法显示。解决这个问题,同样可以使用前边叙述的调用JS的办法,使用ResolveUrl完成工作。不过,还有另外一个办法,即将runat="server"加入到上代码内,做成一个服务器控件,这样内容页引用就不会出现问题,如下图:
对比一下代码的不同,发现alt属性名改为了title属性名,这是因为img标签变成了服务器控件,所以文字显示的属性相应由HTML中的alt改变为.NET中的title,同时,原来的id变成了class,这是由于在服务器控件中,id是控件识别符,不是调用CSS的属性名,因此,如果对img标签有各种CSS的修饰定义,需要将其定义为类,用class的方式调用。
当然,对图片来说,也可以使用服务器的image控件来调出图片。但是,请相信,HTML中的img也有.NET服务器控件所无法替代的优点。