在图像的 ImageUrl 中去除/忽略参数,但仍在中继器中显示它



我在中继器中有一个图像控件。我想排除/忽略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/.

最新更新