图像控件asp.net中没有显示图像

时间:2014-02-12 11:13:13

标签: c# asp.net

以下是我在UI中的图像控件:

  <asp:Image ID="Image1" ImageUrl='<%# Bind("strCLogo") %>' runat="server" width="200" Height="200"/>

这是C#代码,我从数据库(customerstbl)抓取图像的链接,但无法将其与图像控件绑定,我可以看到源中的图像链接,但它没有显示:

 protected void Page_Load(object sender, EventArgs e)
    {
      int nCID = Convert.ToInt32(  Session["nCID"].ToString());

      DataClasses1DataContext _dc = new DataClasses1DataContext();
      CustomersTbl _customer = new CustomersTbl();
      _customer = _dc.CustomersTbls.Where(a => a.nCID == nCID).FirstOrDefault();
     Image1.ImageUrl = _customer.strCLogo.ToString();

    }

这是我如何在数据库中保存图像的链接,当我在数据库中保存图像链接时它似乎有问题(它保存整个路径而不是本地目录路径和图像名称)

string s = Server.MapPath("~/Imageslogo/") + Path.GetFileName(LogoUpload.PostedFile.FileName);
            LogoUpload.SaveAs(s);

2 个答案:

答案 0 :(得分:1)

F:\projects\accounting\Accounting2014\Accounting2014\Imageslogo\10000120324‌​0.jpeg不是Image.ImageUrl Property的正确值,正确的值是~/Imageslogo/10000120324‌​0.jpeg之类的相对路径。

您需要保存数据库的相对路径,使用下面的代码获取相对路径

string imageLocation = string.Format("~/Imageslogo/{0}", Path.GetFileName(LogoUpload.PostedFile.FileName));

并将imageLocation保存到strCLogo表的CustomersTbl列。

答案 1 :(得分:1)

将映像路径保存为相对路径,全局配置根路径

您将图像的路径存储为绝对路径。这有几个原因很糟糕,主要原因是:

  • 如果将应用程序部署到具有不同文件结构的其他服务器,会发生什么?你的绝对路径是错的
  • 如果您决定移动所有图像(但保留图像文件夹的结构)会发生什么?再次,你的绝对路径是错误的。

我建议您将相对图像路径存储在数据库中。在这种情况下/Imageslogo/100001203240.jpeg。然后将图像 root 路径(相对路径前的部分)存储在Web.config文件中。例如。在appSettings

<appSettings>
    <add key="myApp.Imageroot" value="F:\projects\accounting\Accounting2014\Accounting2014" />
</appSettings>

您可以使用以下代码获取此appSetting值:

string myRoot = System.Configuration.ConfigurationManager.AppSettings.Get("myApp.Imageroot");

通过完整路径的这两部分,您可以:

  • 使用HTML输出中的相对路径,该路径可以在您的网络服务器上正常工作
  • 通过将appSettings中的根与数据库中的相对路径相结合来构造完整路径。你可能会使用这个,你需要以编程方式操作图像或以其他方式访问实际文件,而不是仅仅将路径传递给客户端浏览器。
  • 通过更改appSetting
  • 轻松更改根目录

注释

顺便说一句,如果您在代码中设置了ImageUrl属性,则ImageUrl中的.aspx属性将变得毫无意义。所以删除它:

<asp:Image ID="Image1" runat="server" width="200" Height="200"/>