当我用代码后面的网址设置图片时它不起作用,我不知道为什么?
if (File.Exists(Server.MapPath("~/Images/EmpQr/") + int.Parse(Session["userID"].ToString()) + ".PNG")) //It passes this condition
{
tr_res.Visible = true;
img_res.ImageUrl = Server.MapPath("~/Images/EmpQr/" + int.Parse(Session["userID"].ToString()) + ".PNG"); //Here 's the problem ,no image
}
else
{
tr_res.Visible = false;
}
<asp:Image ID="img_res" runat="server" AlternateText="result" />
当我像这样设置图片网址时
ImageUrl ="~/Images/EmpQr/1345.PNG"
在设计视图中可行。
如何解决这个问题?
答案 0 :(得分:4)
Server.MapPath
为您提供文件的本地路径。而你真正想要的是相对于应用程序根路径(在服务器上!)。对于你已经拥有的,~/Images/EmpQr/
没问题,所以只需附加文件名:
img_res.ImageUrl = string.Format("{0}{1}.PNG", "~/Images/EmpQr/", int.Parse(Session["userID"].ToString()));
更新。出于好奇,在评论中讨论后,这是Image
控件源代码的相关部分,它证明了~/Images/...
形式的网址将是处理得当:
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
string text = this.ImageUrl;
if (!this.UrlResolved)
{
text = base.ResolveClientUrl(text);
}
if (this.RenderingCompatibility >= VersionUtil.Framework45)
{
if (!string.IsNullOrEmpty(text) || base.DesignMode)
{
writer.AddAttribute(HtmlTextWriterAttribute.Src, text);
}
}
else
{
if (text.Length > 0 || !base.EnableLegacyRendering)
{
writer.AddAttribute(HtmlTextWriterAttribute.Src, text);
}
}
//...
答案 1 :(得分:3)
您自己发现了问题,因为正如您所说,使用“〜/ Images /.../”设置图像URL有效,而使用Server.MapPath则不然。 Server.MapPath不起作用的原因是因为此函数返回图像的物理路径(如c:\ site ...),您需要的是虚拟路径。您可以使用Page.ResolveClientUrl从后面的代码设置图像路径。像这样:
image.ImageUrl= ResolveClientURL("~/Images/image.png");
答案 2 :(得分:0)
Server.MapPath(“〜/ Images / EmpQr /”+ int.Parse(Session [“userID”]。ToString())+“。PNG”)而不是这个使用这一个 Server.MapPath(“〜/ Images / EmpQr /”)+ int.Parse(Session [“userID”]。ToString())+“。PNG”