2013-08-05 1 views
3

Когда я установил изображение с кодом в коде, за ним не работает, я не знаю почему?Невозможно отобразить изображение при настройке его 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" /> 

Когда я установить адрес изображения, как этот

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

с точки зрения дизайна он работает.

Как исправить эту проблему?

ответ

4

Server.MapPath дает вам локальный путь к файлу. Хотя то, что вы действительно хотите, относится к корневому пути приложения (на сервере!). Для этого, что у вас уже есть, ~/Images/EmpQr/ прекрасно, так что просто добавьте имя файла к нему:

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

Update. Из любопытства, после обсуждения в комментариях, вот соответствующая часть 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); 
    } 
} 
    //... 
+0

Не будет работать по той же причине, что ответ Мооса не будет работать. – Icarus

+0

@Icarus, на самом деле, будет. Прежде всего отметим, что OP упомянул, что точно такой же URL-адрес, указанный явно в markpu, отлично работает. Во-вторых, помните, что независимо от того, что вы устанавливаете как значение элемента управления (мы говорим об asp: Image здесь, а не только теге img), ASP.NET будет обрабатывать потом и обрабатывать URL-адреса соответствующим образом. В ASP.NET '~ /' является распространенным способом ссылки на корневую папку приложения. – Andrei

+0

Я думаю, что вы правы. Я подумал об этом позже ... Это серверный контроль и, скорее всего, вызовет ResolveClientUrl за кулисами. – Icarus

0

Server.MapPath ("~/Images/EmpQr/"+ int.Parse (Session [" userID "]. ToString()) +" .PNG ") вместо этого используют этот Server.MapPath (" ~/Images/EmpQr/") + int.Parse (Session ["userID"]. ToString()) + ".PNG"

+0

Есть изменения в открытых и закрытых фигурных скобках. Сначала проверьте, затем сделайте комментарий. –

+0

I не сказал, что это было неправильно из-за скобок, я сказал, что это неправильно, потому что вы устанавливаете URL-адрес изображения. Вы не можете использовать Server.MapPath. Ваш ответ по-прежнему не прав, извините. – Icarus

3

Вы обнаружили проблему самостоятельно, поскольку, как вы говорите, настройка URL изображения с использованием «~/Images /.../» работает, тогда как использование Server.MapPath нет. Причина, по которой Server.MapPath не работает, заключается в том, что эта функция возвращает физический путь к изображению (как в c: \ site ...), и вам нужен виртуальный путь. Вы можете установить путь изображения из кода, используя вместо этого параметр Page.ResolveClientUrl. Что-то вроде этого:

image.ImageUrl= ResolveClientURL("~/Images/image.png"); 
Смежные вопросы