从MVC视图调用方法不起作用

时间:2014-09-23 08:36:36

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

我熟悉C#/ .net,但是.net mvc和razor的东西很新, 我想要做的是,我想从视图中调用控制器中的方法,将字符串路径呈现为二进制, 所以我在视图中这样做:

<img src="@Url.Action("ReadFile", "FLK",  new { path = Model.Pict })" />

这在控制器中:

public void ReadFile(string path)
{
    Response.ContentType = "image";
    Response.BinaryWrite(System.IO.File.ReadAllBytes(path));
}

但是当我在控制器中放置一个调试点时,我的调试点从来没有任何线索,任何线索?需要一些建议,谢谢。

3 个答案:

答案 0 :(得分:2)

控制器中的ReadFile()方法应该是这样的 -

public ActionResult ReadFile(string path)
{
    byte[] imgBytes = System.IO.File.ReadAllBytes(path);
    return File(imgBytes, "image/png"); 
}

这里,您的action方法将图像文件读入字节数组,然后使用ActionResult基类的File()方法将内容发送给调用者。

所以你可以在你的视图中使用它 -

<img src='@Url.Action("ReadFile", new { path = Model.Pict }))'/>

答案 1 :(得分:0)

您的控制器方法应如下所示。

[HttpGet]
public ActionResult ReadFile(string path)
{

    return new FileContentResult(System.IO.File.ReadAllBytes(Server.MapPath(path)), "image");
}

视图中的代码没问题。但要确保图像的路径类似于“〜\ Images \ Test.png”;现在控制器中的断点将被击中。在客户端浏览器中加载页面时会触发它。

答案 2 :(得分:0)

public FileContentResult getImage(int id)
{
    byte[] imgBytes = System.IO.File.ReadAllBytes(path);
    if (imgBytes!= null)
    {
        return new FileContentResult(imgBytes, "image/jpeg");
    }
    else
    {
        return null;
    }
}

On Razor

<img src="@Html.Action("ReadFile", "FLK", new { path = Model.Pict })" />