我在ASP.NET 4下使用URL重写(使用ISAPI_Rewrite),我发现我的一些图像没有加载,因为.NET似乎不理解我正在使用html BASE标记(漂亮做URL重写时的标准和必要条件:
例如在我的开发环境中,我有:
<base href='http://localhost/venuefinder/Website/'></base>
在我的网页上我有:
<asp:ImageButton runat="server" ImageUrl="~/images/button.gif" />
在网站的主页(http://localhost/venuefinder/Website/)上,这样可以正常工作,但在使用网址重写的网页上,图片不起作用:
/venuefinder/Website/venues/ashton_gate_stadium/V18639/
..正在浏览器尝试加载:
http://localhost/images/buttons/search-button.gif
而不是:
http://localhost/venuefinder/Website/venues/images/buttons/search-button.gif
这是因为.NET将按钮呈现为:
src="../../../images/buttons/search-button.gif"
......这是不正确的。
有什么方法可以解决这个问题,以便.NET为图像呈现正确的src属性? (没有全部../../../等)
答案 0 :(得分:2)
不在图像中使用~/
,而是在IIS中创建一个名为images
的虚拟文件夹,该文件夹映射到您的图像目录(所以:http://localhost/images
=&gt; c:\myproject\somesubdir\content\images
)。然后你可以使用
<asp:ImageButton runat="server" ImageUrl="/images/button.gif" />
我们为所有网站内容项目(script / images / css)执行此操作。
如果您在HTML中使用<base>
,则浏览器会将给定的网址作为以/
开头的图片的基础。所以在你的情况下,你可以放弃波浪号。
虚拟目录方法的一个优点是,您无需再次打扰网址结构,无论是在.NET还是JS中:
ScriptHelper.RegisterScript("/js/somefile.js")
或
$().append('<img src="/images/file.jpg"/>')