0

我在控制器的回发事件中创建了一个视图包,用于存储图像路径。然后,我在图像 src 属性中使用了这个视图包值。但是图像没有显示。

模型:

public class FileManagement
     {
    public string FileName { get; set; }
    public string Path { get; set; }
      }

图片上传代码

      [HttpPost]
      public ActionResult UploadPic(FileManagement fmanage, HttpPostedFileBase file)
      {
        string email = User.Identity.Name;

        if (file != null && file.ContentLength > 0)
        {
            var FileName = string.Format("{0}.{1}", Guid.NewGuid(), Path.GetFileName(file.FileName));
            var path = Path.Combine(Server.MapPath("~/Content/Uploads"), FileName);
            file.SaveAs(path);

         using (var session = DocumentStore.OpenSession("RavenMemberShip"))
            {

                var query = from q in Session.Query<Registration>() where q.Email == email select q;
                if (query.Count() > 0)
                {
                    foreach (var updated in query)
                    {
                        updated.FileName = FileName;
                        updated.Path = path;
                        session.SaveChanges();

                    }
                }
            }
        }
        else ModelState.AddModelError("", "Remove the errors and try again");
        return View();
    }

控制器

    [HttpGet]
    public ActionResult DisplayPic()
    {
        ViewBag.Imagepath = "C:\\Users\\Wasfa\\Documents\\Visual Studio 2012\\Projects\\MvcMembership\\MvcMembership\\App_Data\\Uploads\\annonymous.jpg";

        return View();
    }

    [HttpPost]
    public ActionResult DisplayPic(FileManagement fm)
    {


        using (var session = DocumentStore.OpenSession("RavenMemberShip"))
        {
            string ipath;
            //  string UserName = User.Identity.Name;
            string UserName = "wasfa_anjum@yahoo.com";
            var getPath = from p in Session.Query<Registration>()
                          where p.Email == UserName
                          select p;
            if (getPath.Count() > 0)
            {
                foreach (var imgpath in getPath)
                {

                    ipath = imgpath.Path;
                    ViewBag.Imagepath = ipath;
                }

           }

        }
        return View();
    }

看法:

    @using (Html.BeginForm())

   {
    <div>
    <img src="@Url.Content(ViewBag.Imagepath)" width="200" height="200" />
    </div>
    <input type="submit" value="Display" />
   }
4

4 回答 4

2

在我看来,您的问题与 ASP.NET MVC 无关,但您缺少一些 HTML/Web 基础知识。

您必须了解,当您想要访问资源(html 文件、图像等)时,您必须使用 HTTP URI 语法。您不能也不应该使用 Windows 文件系统路径语法。

在 HTML 中使用类似的东西C:\\Users\\Wasfa\\Documents\\Visual Studio 2012\\Projects\\MvcMembership\\MvcMembership\\App_Data\\Uploads\\annonymous.jpg"是完全错误的。为了更好地理解它,想象一下当您的 ASP.NET MVC 网站启动并运行以供其用户访问时,他们会来到您的网页,并且在他们的浏览器上下载的 HTML 将是:

<img src="C:\Users\Wasfa\Documents\Visual Studio 2012\Projects\MvcMembership\MvcMembership\App_Data\Uploads\annonymous.jpg" />

你认为他们的计算机上会存在这条路径吗?不。

因此,要指示<img />标签从服务器获取图像,您必须指定完整的 HTTP URI,例如:

<img src="http://mywebsite.com/Content/Uploads/annonymous.jpg" />

或相对 HTTP URI(类似于您网站根文件夹的相对路径):

<img src="~/Content/Uploads/annonymous.jpg" />

您的方法的另一个问题是这App_Data是一个特殊文件夹,默认情况下无法从浏览器访问其内容。因此,根据 ASP.NET MVC 约定,您可以Content在项目中创建一个文件夹来保存静态图像和其他静态内容(如样式表),然后链接到它们。

一旦你这样做了,没有人会阻止你提供默认图像的相对路径作为 ViewBag 属性。

ViewBag.Imagepath = "~/Content/Uploads/annonymous.jpg";

然后以您想要的方式使用它:

<img src="@Url.Content(ViewBag.Imagepath)" width="200" height="200" />

我还希望您随后从数据库中获取的路径也遵循此方案。

于 2013-09-28T14:21:15.840 回答
1
  • 图像路径必须有正斜杠 (/),
  • 更多这种类型的路径可能仅适用于您的本地系统,而不适用于您的服务器。
  • 尝试使用Server.MapPath来获取您的路径
  • 使用 ViewBag 显示图像是一个坏主意,请考虑使用您的模型属性来存储图像路径并使用

    <img src="@Url.Content(Model.ImagePath)" alt = "Image" />

编辑

控制器:

    [HttpGet]
    public ActionResult DisplayPic()
    {
        FileManagement fm = new FileManagement();
        fm.Path = "Your image path";

        return View(fm);
    }

看法 :

`<img src="@Url.Content(Model.path)" alt = "Image" />`

没有检查代码,但这应该可以。

于 2013-09-28T12:57:32.043 回答
0

看起来你只需要一个 getPath 的结果,这可能会清理你的代码

var imgPath= Session.Query<Registration>()
                 .FirstOrDefault(p => p.Email == UserName)
                 .Select(i => i.Path);

if (!string.IsNullOrEmpty(imgPath)
    ViewBag.Imagepath = imgPath;
else
{
    //no user found, handle error
}

除了您的代码看起来不错之外,您能否通过您的应用程序进行调试,并在查询运行后查看 imgPath 等于什么?

于 2013-09-28T13:06:21.503 回答
0

万一,如果从网页导出到excel时要显示的图像。使用镜像的服务器路径,否则无法从程序集镜像文件夹中加载镜像。

示例

配置:

<add key="LogoPath" value="http:\\mysite\\images\\" />

代码:

companyLogo = string.Format("{0}myLogo.png", System.Web.Configuration.WebConfigurationManager.AppSettings["LogoPath"]);

HTML:

<img src='" + @Url.Content(companyLogo) + "' />
于 2017-07-07T08:22:13.623 回答