【问题标题】:Images are not loading inside repeater when deploying web application to IIS将 Web 应用程序部署到 IIS 时,图像未在转发器内加载
【发布时间】:2018-01-29 15:38:52
【问题描述】:

我已经按照Microsoft Docs (Deploy to Test) 部署了我的asp.net Web 应用程序。

将我的应用程序部署到 IIS 后,Repeater 控件中的图像无法加载。在调试/开发中,这些加载正确。

以下是我的代码(带有图像控制的中继器):

<asp:Repeater ID="rpBanquetList" runat="server">
    <ItemTemplate>
        //... other controls
        <asp:Image ID="imgImagePath" ImageUrl='<%#"Images/"+Eval("imgImagePath") %>'
            runat="server" />
        //... other controls
    </ItemTemplate>
</asp:Repeater>

Windows 7:IIS 8:VS15 社区

【问题讨论】:

  • 你检查view source时HTML中生成的URL是否与图片的虚拟位置一致?
  • 我已经确认是正确的。
  • 好的,你检查过把same图片URL放到浏览器中是否会加载图片吗?
  • 当我在浏览器中输入 URL 时,它会加载图像。
  • 如果这些图像(或其他文件)未添加到 Visual Studio 解决方案资源管理器中,则在部署应用程序时不会上传它们。因此,您可能需要检查图像是否存在于服务器上。并且在前面使用斜杠以确保根路径使用总是一个好主意:"/Images/"+Eval("imgImagePath")

标签: c# asp.net iis


【解决方案1】:

您可能在使用相对 URL 时遇到问题。你可以试试这样的:

<asp:Repeater ID="rpBanquetList" runat="server">
<ItemTemplate>
    //... other controls
    <asp:Image ID="imgImagePath" ImageUrl='<%#"~/Images/"+Eval("imgImagePath") %>'
        runat="server" />
    //... other controls
</ItemTemplate>

您的图像可能位于AppRootDirectory\Images\,并且您正试图从与AppRootDirectory 不同的目录中的页面访问它们,比如说AppRootDirectory\MyWebform\pageWithRepeaterControl.aspx。在这种情况下,图像的相对 URL 将被解析为:

http://hostName/appName/MyWebForm/Images/ + 来自Eval("imgImagePath") 的值。注意这里的/Images/ 被解释为appName 的子目录。

请注意,appName 可能是也可能不是您项目 URL 的一部分。这取决于您如何部署 Web 应用程序,它是位于 IIS 中网站的根目录中,还是作为此类网站中的应用程序。

您可以使用 ~ 运算符来获取相对于根目录的路径。使用与之前相同的示例,~/Images/ 将解析为 http://hostName/appName/Images/,这将是您服务器中的 AppRootDirectory\Images\ 物理路径。

更多关于web project paths here的信息

希望对你有帮助。

【讨论】:

    【解决方案2】:

    您可以将asp.net控制器替换为html控制器,并在代码隐藏文件中指定绝对路径,如下所示。

    <asp:Repeater ID="rpBanquetList" runat="server">
        <ItemTemplate>
            //... other controls
             <img id ="imgImagePath" src="<%= AbsolutePath %>images/<%#Eval("imgImagePath")%>"/>
            //... other controls
        </ItemTemplate>
    </asp:Repeater>
    

    关于文件背后的代码

     string absolutePath =  this.Request.Url.Scheme + "://" + this.Request.Url.Host + ":" + this.Request.Url.Port + this.ResolveUrl("~/");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 2020-10-24
      相关资源
      最近更新 更多