Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么可以';图像标记中的属性imageurl不接受绝对路径吗?_Asp.net_Relative Path_Absolute Path_Imageurl - Fatal编程技术网

Asp.net 为什么可以';图像标记中的属性imageurl不接受绝对路径吗?

Asp.net 为什么可以';图像标记中的属性imageurl不接受绝对路径吗?,asp.net,relative-path,absolute-path,imageurl,Asp.net,Relative Path,Absolute Path,Imageurl,我使用了两个图像标签。在一种情况下,使用的路径是相对的,而在另一种情况下,使用的路径是绝对的。绝对路径图像未显示。代码如下: Expt_Image2.aspx页面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Expt_Image2.aspx.cs" Inherits="Expt_Image2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio

我使用了两个图像标签。在一种情况下,使用的路径是相对的,而在另一种情况下,使用的路径是绝对的。绝对路径图像未显示。代码如下:

Expt_Image2.aspx页面

<%@ 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>
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);
    }
}

第一个错误是,在
页面加载方法中,您获取图像并将其存储在数组中。在C#中,数组中项的索引从0开始,而不是从1开始

其次,必须指定
Image
控件的属性
ImageUrl
的虚拟路径

这是正确的
页面加载
方法:

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 );
}

第一个错误是,在
页面加载方法中,您获取图像并将其存储在数组中。在C#中,数组中项的索引从0开始,而不是从1开始

其次,必须指定
Image
控件的属性
ImageUrl
的虚拟路径

这是正确的
页面加载
方法:

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 );
}

MapPath不返回文件的物理位置。在您的例子中,类似于C:\inetpub\wwwroot\mysite\image

而您可能需要虚拟路径,例如

像这样的方法应该会奏效:

    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);

MapPath不返回文件的物理位置。在您的例子中,类似于C:\inetpub\wwwroot\mysite\image

而您可能需要虚拟路径,例如

像这样的方法应该会奏效:

    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);

使用应用程序路径

Request.ApplicationPath + "~/Image/"
这将解决问题


还有一件事。您不需要在路径前加“~”。

使用应用程序路径

Request.ApplicationPath + "~/Image/"
这将解决问题


还有一件事。您不需要在路径前加“~”。

如果检查呈现的HTML,它希望图像位于何处?这真的是映像所在的地方吗?Hi Main Point是安全性的,如果允许任何Web应用程序访问系统目录,而不是允许的目录[应用程序运行的文件夹名为root~],那么任何代码都可以删除任何文件,服务器上的文件夹,并且您知道服务器上将托管多个网站,服务器系统配置将不允许您访问~及其子文件夹之外的任何内容。如果您检查呈现的HTML,它希望图像位于何处?这真的是映像所在的地方吗?Hi Main Point是安全性的,如果允许任何Web应用程序访问系统目录,而不是允许的目录[应用程序运行的文件夹名为root~],那么任何代码都可以删除任何文件,您知道服务器上将托管多个网站,服务器系统配置将不允许您访问~及其子文件夹之外的任何内容。首先,您可以从
image
目录获取所有图像文件。然后为目录中的第一个映像创建一个
Image
控件,并为其设置第一个映像的路径。当您使用
System.IO
命名空间中的类时,必须为它们提供实际路径,例如
C:\MySite\MyFolder\MyImage.jpg
。但是使用ASP.NET服务器控件,您必须使用虚拟路径,如
~/MyFolder/MyImage.jpg
。首先,您可以从
image
目录获取所有图像文件。然后为目录中的第一个映像创建一个
Image
控件,并为其设置第一个映像的路径。当您使用
System.IO
命名空间中的类时,必须为它们提供实际路径,例如
C:\MySite\MyFolder\MyImage.jpg
。但是使用ASP.NET服务器控件时,必须使用虚拟路径,如
~/MyFolder/MyImage.jpg