Asp.net mvc 显示来自相对图像URL的图像不工作

Asp.net mvc 显示来自相对图像URL的图像不工作,asp.net-mvc,database,Asp.net Mvc,Database,我已经采取了将文件上传到文件系统并在数据库中持久化文件路径的方法 我已成功地通过将图像文件上载到(“~/Content/images”+文件名) 我已经成功地将文件路径持久化到数据库 auction.ImageURL = path; 但是图像没有呈现,检查后,图像源url反映了图像的绝对路径 C:\Users\cmazzochi81\Documents\Visual Studio\2015\Projects\MyAuctionApp\Content\images 发生了什么事 控制器- [A

我已经采取了将文件上传到文件系统并在数据库中持久化文件路径的方法

我已成功地通过将图像文件上载到(“~/Content/images”+文件名)

我已经成功地将文件路径持久化到数据库

auction.ImageURL = path;
但是图像没有呈现,检查后,图像源url反映了图像的绝对路径

C:\Users\cmazzochi81\Documents\Visual Studio\2015\Projects\MyAuctionApp\Content\images
发生了什么事

控制器-

[Authorize]
[HttpPost]
    public ActionResult Create(Models.Auction auction, HttpPostedFileBase file)
    {

        if (ModelState.IsValid)
        {
            if (file != null)
            {
                string fileName = System.IO.Path.GetFileName(file.FileName);
                string path = System.IO.Path.Combine(
                                       Server.MapPath("~/Content/images" + fileName));

                // file is uploaded
                file.SaveAs(path);
                var db = new AuctionsDataContext();
                auction.ImageURL = path;
                db.Auctions.Add(auction);
                db.SaveChanges();
                return RedirectToAction("Index");

            }

        }
        return Create();  
    }
<img src="@auction.ImageURL" title="@auction.Title" />
模型

[DataType(DataType.ImageUrl)]
[Display(Name = "image URL")]
public string ImageURL { get; set; }
视图-

[Authorize]
[HttpPost]
    public ActionResult Create(Models.Auction auction, HttpPostedFileBase file)
    {

        if (ModelState.IsValid)
        {
            if (file != null)
            {
                string fileName = System.IO.Path.GetFileName(file.FileName);
                string path = System.IO.Path.Combine(
                                       Server.MapPath("~/Content/images" + fileName));

                // file is uploaded
                file.SaveAs(path);
                var db = new AuctionsDataContext();
                auction.ImageURL = path;
                db.Auctions.Add(auction);
                db.SaveChanges();
                return RedirectToAction("Index");

            }

        }
        return Create();  
    }
<img src="@auction.ImageURL" title="@auction.Title" />

Server.MapPath返回提供的虚拟路径的物理目录。如果要查找可在
img src
属性中使用的文件夹的虚拟路径,则需要使用
virtualpath.ToAbsolute

由于听起来您希望保存文件(因此需要物理路径)并返回指向文件的链接(因此需要虚拟路径),因此您需要同时使用这两种方法

    if (ModelState.IsValid)
    {
        if (file != null)
        {
            string fileName = System.IO.Path.GetFileName(file.FileName);
            string savePath = System.IO.Path.Combine(Server.MapPath("~/Content/images"), fileName);
            string url =  System.IO.Path.Combine(VirtualPathUtility.ToAbsolute("~/Content/images"), fileName);

            // file is uploaded
            file.SaveAs(savePath);
            var db = new AuctionsDataContext();
            auction.ImageURL = url;
            db.Auctions.Add(auction);
            db.SaveChanges();
            return RedirectToAction("Index");

        }

谢谢约翰抽出时间。这不管用。我需要做的是将文件的相对路径保存到数据库。现在正在保存绝对路径。当我在浏览器开发人员工具中编辑以下路径时:C:\Users\cmazzochi81\Documents\visualstudio 2015\Projects\MyAuctionApp\Content\images\chief.jpg到src=“\Content\images\chief.jpg”,图像将呈现。如果使用的是
virtualpath.ToAbsolute(~/Content/images”)
,它将返回类似于
/Content/images
(基于您的网站设置)的内容。如果您仍在获取完整路径,听起来它仍在尝试使用
Server.MapPath
,它将返回文件夹的物理路径,如
C:\users\..
。您能否确认
virtualPath.ToAbsolute()
返回的是什么?它返回的是“/Content/images/image.jpg”“在以下行中检查--file.SaveAs(路径);调试器将在其上停止并报告以下错误:“mscorlib.dll中发生“System.IO.DirectoryNotFoundException”类型的异常,但未在用户代码中处理其他信息:找不到路径“C:\Content\images\image.jpg”的一部分。”那么您想将文件保存到images文件夹并返回图像的相对URL?我会更新我的答案使之生效。是的,我想是的。我需要什么是存储在数据库中,是图像的相对URL。