我在中继器中有一个图像控件。我想排除/忽略imageurl属性中的一个参数,因为路径(源图像)在名称中没有这个参数,但我仍然想在url中显示这个参数。我不能重命名所有的图像,因为有很多。希望这是有意义的。
下面是一个例子。
这是为了SEO。原路径
- /产品/0001 _100_00_kk00_f02.png
我想在imageurl
中显示的内容- /产品/0001 _100_00_kk00_f02.png/Tv-Sony-lcd-black-bravia-KDL-26V4500
或
- /产品/0001 _100_00_kk00_f02/Tv-Sony-lcd-black-bravia-KDL-26V4500.png
后台代码<asp:Repeater ID="rptImages" runat="server"> <ItemTemplate> <asp:Image ID="Image1" ImageUrl='<%# Eval("Url") %>' runat="server" /> </ItemTemplate> </asp:Repeater>
和
rptImages.DataSource = Images.Select(s => new { Url = s }); rptImages.DataBind();
这对于原始路径来说很好。但是当我将/Tv-Sony-lcd-black-bravia-KDL-26V45000
添加到url的末尾时,没有找到图像(当然)。
那么我如何添加一个额外的参数到imageurl,但让图像控件忽略它,仍然找到图像路径?
有谁知道如何解决这个问题吗
您可以通过URL重写来实现。增加全球。把ax文件放到你的项目中,并使用一些重写逻辑,像这样。
void Application_BeginRequest(Object sender, EventArgs e)
{
string currentPath;
currentPath = Request.Path; // /product/0001_100_00_KK00_F02.png/Tv-Sony-lcd-black-bravia-KDL-26V4500
if (currentPath.IndexOf(".png") > -1)
{
string[] paths = currentPath.Split('/');
currentPath = currentPath.Replace("/" + paths[paths.Length - 1], ""); // /product/0001_100_00_KK00_F02.png
Context.RewritePath(currentPath);
}
}
这将工作,但也会重写所有的请求。因为"if (currentPath.IndexOf(".png")> -1)"
这样的URL会起作用吗?
/产品/0001 _100_00_kk00_f02.png ?Tv-Sony-lcd-black-bravia-KDL-26V4500
只要你在文件名后面加上一个问号,你的图像就会显示得很好。正如@Jon Edgerton指出的,IIS没有找到你的图像,这就是为什么它不显示。
如果你想要一个完全自定义的URL,那么你将不得不做一些URL重写。这里有一篇文章:http://learn.iis.net/page.aspx/517/url-rewriting-for-aspnet-web-forms/.