我正在尝试显示本地存储(而非内容文件夹)中的图像。我使用的图片标签看起来像这样。
@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问题中的答案,添加了包含扩展方法的类的名称空间,但图像仍未在视图中呈现。
答案 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 {...}