ASP.NET:组合URL重写,asp:ImageButton和html基本标记时图像被破坏

时间:2010-04-23 10:57:53

标签: asp.net asp.net-4.0 url-rewriting

我在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属性? (没有全部../../../等)

1 个答案:

答案 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"/>')