无法在剃刀视图中使用扩展方法

时间:2016-03-09 12:21:14

标签: c# asp.net-mvc razor

我正在尝试显示本地存储(而非内容文件夹)中的图像。我使用的图片标签看起来像这样。

@if (Model.PreviousCoverPic != null)
{
    <img src="@Url.Action("ServeImage", "Profile",new {path = Model.PreviousCoverPic})" alt="Previous Profile Pic" />
}

我将 ServerImage 方法作为扩展方法,因为它将由多个控制器使用。以下是该方法的代码:

public static ActionResult ServeImage(this System.Web.Mvc.Controller controller, string path)
{
    Stream stream = new FileStream(path, FileMode.Open);
    FileResult fileResult = new FileStreamResult(stream, "image/jpg");
    return fileResult;
}

它返回图像的FileResult,以便显示它。但是,在渲染视图时,它不会显示图像。我检查了 Model.PreviousCoverPic 值,它不是null。我在这里错过了什么?如何从本地文件夹中实现显示方法?另外,我按照this问题中的答案,添加了包含扩展方法的类的名称空间,但图像仍未在视图中呈现。

1 个答案:

答案 0 :(得分:2)

根据以下来源

Can MVC action method be static or extension method

这个答案

extend ASP.NET MVC action method,How to do return View

扩展方法不适用于路由Url.Action。您可以使用继承来创建具有该操作的基类。这样,所有继承的类都将具有操作,并且对Url.Action的调用将是有效的。

public abstract class MyBaseController : Controller {
    public ActionResult ServeImage(string path) {...}
}

public class ConcreteController : MyBaseController {...}