Kai*_*Kai 9 c# asp.net-mvc image
我们的数据库中有一些图像,想要在视图中显示它们.我找到了两种方法 - 第一种:我们在控制器中创建动作方法,从数据库获取图像并返回FileContentResult:
public ActionResult GetImage( int id )
{
var imageData = ...get bytes from database...
return File( imageData, "image/jpg" );
}
Run Code Online (Sandbox Code Playgroud)
代码在视图中:
<img src='<%= Url.Action( "GetImage", "image", new { id = ViewData["imageID"] } ) %>' />
Run Code Online (Sandbox Code Playgroud)
第二种方法是使用HttpHandler:
public void ProcessRequest(HttpContext Context)
{
byte [] b = your image...;
Context.Response.ContentType = "image/jpeg";
Context.Response.BinaryWrite(b);
}
Run Code Online (Sandbox Code Playgroud)
和视图中的代码:
<img src="AlbumArt.ashx?imageId=1" />
Run Code Online (Sandbox Code Playgroud)
第一个问题是实现此功能的最有效(工作更快)方式是什么(以及为什么它的工作速度更快)?
第二个问题 - 当我们第一次调用action方法返回此视图时,有一种方法可以直接将图像放入我们的视图中吗?我的意思是在动作方法中我们从数据库中获取图像列表并将它们作为列表传递给视图,并在视图中使用此代码:
<%=Html.Image(Model[i])%>
Run Code Online (Sandbox Code Playgroud)
该代码必须直接从模型中将图像放入视图中.
两种方法的性能差异不大.显然使用http处理程序将是你可以获得的最快,因为请求不会通过MVC生命周期(路由,实例化控制器,模型绑定,调用操作)但我认为这是一个微优化,我个人会使用第一种方法,因为它在MVC场景中更适应.如果您后来通过执行大量的负载测试意识到这是您的应用程序的瓶颈,您可以随时切换到http处理程序方法.
至于你的第二个问题是关于帮助者,答案是否定的,你不能轻易做到这一点.唯一的可能性是使用数据URI方案,但并非所有浏览器都支持此方案.这样,如果您的模型具有图像的字节数组,您可以编写一个帮助程序,该帮助程序呈现以下内容:
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAA..." alt="Red dot" />
Run Code Online (Sandbox Code Playgroud)
图像数据直接编码到页面中.另一个缺点是,这些图像永远不会被缓存,并且您的HTML页面可能会变得非常大.
| 归档时间: |
|
| 查看次数: |
12583 次 |
| 最近记录: |