排除/忽略图像图像URL中的参数,但仍在Repeater中显示它

时间:2012-01-02 13:00:35

标签: c# asp.net visual-studio image repeater

我在转发器中有一个图像控件。我想排除/忽略imageurl属性中的参数,因为路径(源图像)名称中没有此参数,但我仍想在url中显示该参数。我无法重命名所有图像,因为有很多。希望它有意义。

这是一个例子。

是SEO。原始路径

  • /product/0001_100_00_KK00_F02.png

我想在imageurl中显示什么

  • /product/0001_100_00_KK00_F02.png/Tv-Sony-lcd-black-bravia-KDL-26V4500

OR

  • /product/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时,找不到图像(当然)。

那么如何在imageurl中添加一个额外的参数,但让图像控件忽略它并仍然找到图像路径?

有没有人对如何解决这个问题有任何想法

2 个答案:

答案 0 :(得分:0)

像这样的网址会起作用吗?

/product/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/

答案 1 :(得分:0)

您可以通过URL重写来实现这一目标。将global.asax文件添加到项目中并使用某种类型的重写逻辑。

    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);
    }
}

这会起作用,但也会重写所有包含“.png”的request.paths,因为“if(currentPath.IndexOf(”。png“)&gt; -1)” 包括更多的调理更安全。