Почему атрибут imageurl в теге изображения не может принимать абсолютный путь? - PullRequest
0 голосов
/ 14 февраля 2011

Я использую два тега изображения. В одном из них используемый путь является относительным, а в другом - абсолютным. Абсолютное изображение пути не отображается. Вот код:

Expt_Image2.aspx page :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Expt_Image2.aspx.cs" Inherits="Expt_Image2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Image
                ID="Image1"
                runat="server"
                ImageUrl="~/Image/Bluehills.jpg"
                Height="100"
                Width="100"/>
            <asp:Image
                ID="Image2"
                runat="server"
                ImageUrl="C:\Documents and Settings\Lovey\My Documents\Visual Studio 2008\WebSites\Expt-New\Image\Sunset.jpg"
                Height="100"
                Width="100"/>
        </div>
        </form>
    </body>
</html>

Expt_Image2.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
public partial class Expt_Image2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string[] files = Directory.GetFiles(MapPath("~/Image/"));
        Image im = new Image();
        im.ImageUrl = files[1];
        im.AlternateText = files[1];
        form1.Controls.Add(im);
    }
}

Ответы [ 3 ]

1 голос
/ 14 февраля 2011

MapPath не возвращает физическое местоположение файла. В вашем случае что-то вроде C: \ inetpub \ wwwroot \ mysite \ image

В то время как вы хотите виртуальный путь, например. http://mysite/image/image1.png

Примерно так должно работать:

    DirectoryInfo di = new DirectoryInfo(MapPath("~/Image/"));
    FileInfo[] files = di.GetFiles();        

    Image im = new Image();
    im.ImageUrl = "~/Image/" + files[0].Name;
    im.AlternateText = "~/Image/" + files[0].Name;
    form1.Controls.Add(im);
1 голос
/ 14 февраля 2011

Используйте путь к приложению,

Request.ApplicationPath + "~/Image/"

Это решит проблему.

Еще одна вещь.Вам не нужно ставить "~" перед путем.

1 голос
/ 14 февраля 2011

Первая ошибка, что в вашем методе Page_Load вы получаете свое изображение и сохраняете его в массиве.В C # индексы элементов в массивах начинаются с 0, а не с 1.

Во-вторых, вы должны указать виртуальный путь к свойству ImageUrl элемента управления Image.

Этоправильный Page_Load метод:

protected void Page_Load(object sender, EventArgs e)
{
    string[] files = Directory.GetFiles( MapPath( "~/Image/" ) );
    Image im = new Image();
    im.ImageUrl = "~/Image/" + Path.GetFileName( files[ 0 ] );
    im.AlternateText = files[ 0 ];
    im.Height = 100;
    im.Width = 100;
    form1.Controls.Add( im );
}
...