如何在asp.net mvc中渲染图像?

时间:2010-08-22 09:43:40

标签: c# asp.net-mvc model-view-controller

我正在构建一个示例,即使用Northwind数据库。 我有一个视图,其中我显示了特定类别的所有产品,并使用ul生成带有图像的项目以及产品名称和价格。

我在这里使用了代码http://blogs.msdn.com/b/miah/archive/2008/11/13/extending-mvc-returning-an-image-from-a-controller-action.aspx

并且已经明白,如果我右键单击我页面上的图像,我会得到 以下是图片网址。

这是我提供的操作方法,它只接受分类ID。 /图像/显示/ 1

我的ImageController中的动作方法如下:

    //
    // GET: /Image/Show
    public ActionResult Show(int id)
    {
        var category = northwind.AllCategories().Single(c => c.CategoryID == id);
        byte[] imageByte = category.Picture;
        string contentType = "image/jpeg";

        return this.Image(imageByte, contentType);
    }

注意:图片是一个字节[]

然后我在我的视图中这样称呼它。 (产品是我的观点的模型)

     

但我仍然无法显示图像。

4 个答案:

答案 0 :(得分:10)

改变行动

public FileContentResult Show(int id)
{
    var category = northwind.AllCategories().Single(c => c.CategoryID == id);
    byte[] imageByte = category.Picture;
    string contentType = "image/jpeg";

    return File(imageByte, contentType);
}

并发送产品实例以在View

中查看并尝试此操作
<img src="<%: Url.Action("Show","Image",new { id = Model.Category.CategoryID  }) %>" />

答案 1 :(得分:1)

尝试使用此方法:

public FileContentResult Show(int id)
{
  var category = northwind.AllCategories().Single(c => c.CategoryID == id);  
  byte[] imageByte = category.Picture;  
  string contentType = "image/jpeg";
  return File(imageByte, contentType);
}

如果您不使用该扩展名,这应该是基本方法。如果这工作,则错误是扩展的,如果这不起作用,则错误在其他地方 - 可能在路由中。还要检查Gustav的答案!

答案 2 :(得分:0)

我不确定这是否是您的问题,但我总是将操作和控制器名称大写:

<%= Url.Action( "Show", "Image", new { id = product.Category.CategoryID } ) %> 

答案 3 :(得分:0)

原来我不得不使用anoynomus类型 '这样路由是/ Image / Show / 1,而不是/ Image / Show?CategoryID = 1。那当然需要将Northwind中的图像从位图更新为Jpeg。