mvc 4无法调用控制器中的函数

时间:2013-10-30 07:33:09

标签: asp.net-mvc asp.net-mvc-4

我的目的是显示特定型号的信息。

在那个信息中我有一个图像,这是一个数组的字节。

现在我想要显示该图像。

我在我看来这是

<img src="@Url.Action("getImg", "Image",  new { image = Model.image })" />

请注意,Image控制器与当前视图所属的控制器

不同

我的错误是什么?

所有其他信息都正确显示。

修改

这是我想要调用的控制器

public class ImageController : Controller
{
    //
    // GET: /Image/

    public ActionResult Index()
    {
        return HttpNotFound();
    }

    // To convert the Byte Array to the image
    public FileContentResult getImg(byte[] image)
    {
        if (image != null)
        {
            return new FileContentResult(image, "image/jpeg");
        }
        else
        {
            return null;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这在设计上似乎是一个非常糟糕的选择。这段代码:

<img src="@Url.Action("getImg", "Image",  new { image = Model.image })" />

因此,图像将作为字节数组发送到客户端(假设为60,000字节)。将创建可能看起来像的HTML:

<img src="/Image/getImg/?image=bc15b2c53... (lots of characters" />

这个html非常长,基本上将图像作为字节数组发送到客户端。接下来,浏览器将通过将字节数组发送回控制器(另外60,000字节到服务器)来另外请求获取图像。

接下来,控制器将发送给它的字节数组再次返回给浏览器,作为图像。三次60k的数据是一个糟糕的想法。

<强>更新

更好的方法是不将字节数组发送到视图,而是发送ID。

<img src="@Url.Action("getImg", "Image",  new { id = Model.id })" />

然后在控制器中:

public class ImageController : Controller
{
  public FileContentResult getImg(int?/guid? id)
  {
    if (id.HasValue)
    {
      byte[] bytes = db.GetBytesById(id.Value);                                
      return new FileContentResult(bytes, "image/jpeg");
    }
    else
    {
      // be nice to the browser, send the correct result!
      return new FileNotFoundResult();
    }
  }
}