【问题标题】:how to pass an image to multiple views in MVC 4如何在 MVC 4 中将图像传递给多个视图
【发布时间】:2013-07-23 15:05:30
【问题描述】:

我需要在整个 MVC 4 项目中将图像传递给多个视图。 最干净的方法是什么? 图像保存为字节数组。 我将图像保存到数据库中(这是用户输入的) 而且我不想创建大量的视图模型。 请注意,这是一个在 C# 中使用 Razor2 视图的 MVC 4 应用程序。

【问题讨论】:

  • 你们能澄清一下吗?如果我使用部分视图,那是不是意味着我只能将它与同一控制器中的另一个视图一起使用...... HttpSessions?

标签: c# asp.net-mvc html asp.net-mvc-4 razor-2


【解决方案1】:

你可以在你的控制器中使用这样的东西:
对于可下载的文件:

public ActionResult GetImage(string name)
{
    byte[] image = GetImageFromDb(name);
    return File(image, "image/jpg", "image1.jpg");
}

对于视图/页面中包含的文件:

public FileContentResult GetImage(string name)
{
    byte[] image = GetImageFromDb(name);
    return FileContentResult(image, "image/jpg");
}

并像这样在您的视图中使用它:

<img src="@Html.Action("GetImage", new { name = "image1"})">

【讨论】:

  • 这样 ActionResult 将被放置在收集到不同视图的每个控制器中是吗? name = 数据库中的列名还是我需要在模型中创建图像名称属性?
  • 您可以将ActionResult添加到一个控制器,并在Html.Action方法中指定控制器。图像的名称类似于数据库中的键,但您可以根据您的数据库/模型进行更改。
  • 抱歉,为几行代码付出了努力,但是,GetImageFromDb?那应该是智能的吗?或者这是否意味着我必须声明保存图像的模型才能访问数据库值? “在您的数据库中键入”,您的意思是 ID 吗?我为该模型所拥有的只是一个生成的 ID 和字节数组..
  • 你要根据你使用的数据库自己写GetImageFromDb方法。名称是您用来识别图像的 ID。如果您的模型中已经有图像,则可以使用它,而不是使用新方法从数据库中加载它。
  • 使用的方法.... public AdminPractice Get(int id) { return GetAll().FirstOrDefault(a => a.ID == id); }................................................. ..................... public ActionResult GetImage(int id) { byte[] image = _adminPractice.Get(id).PracticeLogo;返回文件(图像,“图像/jpg”,“image1.jpg”); }................................................. ..................... ...... .那是正确的吗??
【解决方案2】:

好吧,我有点离题,但感谢 Raidri 带领我朝着正确的方向前进。 控制器...

      public FileContentResult GetLogoImage(int id)
    {
        var logo = _adminPractice.GetAll().FirstOrDefault(n => n.ID == id);
        if (logo != null && logo.PracticeLogo != null)
        {
            return new FileContentResult(logo.PracticeLogo, "image/jpeg");
        }
        else
        {
            return null;
        }
    }

查看............

     <img src="@Url.Action("GetLogoImage", new { id = Model.AdminPractice.ID })" />

【讨论】:

  • 对,我的方式是下载可下载文件。我将编辑我的答案以包含这两种方法。
  • 这只适用于一个视图/控制器,我不想将模型传递给每个控制器和视图?有没有什么方法可以存储检索到的图像,而无需多次调用同一图像的数据库?
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 2018-12-08
  • 2011-07-26
  • 2015-04-07
  • 2014-01-14
  • 1970-01-01
  • 2013-02-15
相关资源
最近更新 更多