c# - 在代码隐藏中设置其 url 时无法呈现图像

标签 c# asp.net image file server.mappath

当我在后面的代码中设置带有 url 的图像时,它不起作用,我不知道为什么?

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

当我这样设置图片url时

ImageUrl ="~/Images/EmpQr/1345.PNG"

在设计 View 中它有效。

如何解决这个问题?

最佳答案

Server.MapPath 为您提供文件的本地路径。虽然您真正想要的是相对于应用程序根路径(在服务器上!)。为此,您已经拥有的 ~/Images/EmpQr/ 很好,因此只需将文件名附加到它:

img_res.ImageUrl = string.Format("{0}{1}.PNG", "~/Images/EmpQr/", int.Parse(Session["userID"].ToString()));

更新。出于好奇,经过评论讨论,这里是Image控件源码的相关部分,证明了形式的url~/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);
    }
}
    //...

关于c# - 在代码隐藏中设置其 url 时无法呈现图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18054435/

相关文章:

java - 将图像添加到 doc 文件

c# - C#中的字符串提取混淆

c# - 在 RichTextBox 中格式化单词

c# - 覆盖锚定容器中的锚定样式

C# 监视用户退出应用程序时的行为

c# - LINQ 组按星期几抛出异常

c# - 基础连接已关闭。无法使用 HTTP.sys 运行 Asp.Net Core 2.1 Web API 应用程序?

c# - 如何在 .NET 4.0 中正确使用 async/await

java - 如何在 JSP 页面中从数据库中检索和显示图像?

html - 下载图片 OnClick