HTML img 和 ASP.NET Image 以及相对路径

18

ASP.NET中,在IIS上进行实时部署时,引用图像的正确方法是什么?

以下内容适用于开发和生产环境:

<asp:ImageButton ID="ibnEdit" runat="server" OnClick="ibnEdit_Click" ImageUrl="~/App_Themes/Default/images/one.png" Visible="false" ToolTip="Edit" />

以下两种方式都不起作用:(为什么?)

<img src="~/App_Themes/Default/images/two.gif" />
以下代码在开发环境中可以工作但在生产环境中不行:
<img src="../App_Themes/Default/images/two.gif" />

你确定你的图片已经在生产环境中部署了吗? - Jakob Gade
图片是否与开发环境在同一路径下? - kobe
6个回答

28

如果你想要使用带有~路径的常规img标记,你可以将runat="server"作为属性添加到标记中(就像常规服务器控件一样),该路径将被解析。例如:

<img src="~/App_Themes/Default/images/two.gif" runat="server" /> 

关于你的第二个问题,如果 "../" 的图片引用出现在多个页面上,例如用户控件或母版页(等等),你可能会在不同的文件夹层次结构中使用它...


很好,这会对网站的整体性能有任何影响吗? - Tanveer
@Tanveer,这基本上不会有任何影响。控件将按照控件生命周期运行。话虽如此,您可能需要添加许多图像才能看到任何区别。 - davidsleeps

6
我使用这个语法来访问母版页中的图片。
<img src="<%=ResolveUrl("~/Content/Images/error_img.jp")%>" width="350" style="padding-right: 15px; padding-top: 20px;"/>

5

波浪线符号(~)只能用于服务器控件,例如 <asp:Image><asp:ImageButton>。这告诉 ASP.Net 插入应用程序路径。有时它只是 "/",但如果您的应用程序不在网站的根目录中,则会包括其所在的路径。img 标签只是 html,不会被 ASP.Net 修改,因此浏览器获取路径 "~/App_Themes/Default/images/two.gif" 并不知道如何读取它。

我不知道为什么最后一个示例在开发环境中可以工作,但在生产环境中不行。这可能与开发环境中将应用程序放在根目录中,而在生产环境中将其放在子目录中有关。


4
+1,此外,@mmmbop,为了解决HTML标记中的/问题,您可以使用UrlHelper类(而不是切换到使用asp:image控件)`<img src="<%= Url.Content("/App_Themes/Default/images/two.gif") %>" />`。 - Paolo Falabella

0

这对我有用

$(".selector").attr('src', "Content/themes/base/images/img.png");

重要的是你的新src开头没有“/”。


0

0
byte[] imageArray = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Upload_Image.png"));

string base64ImageRepresentation = Convert.ToBase64String(imageArray);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接