tva*_*son 122
创建一个控制器,用于显示带有Show动作的图像,该动作将从数据库中显示图像的id.该操作应返回包含具有适当内容类型的图像数据的FileResult.
public class ImageController : Controller
{
public ActionResult Show( int id )
{
var imageData = ...get bytes from database...
return File( imageData, "image/jpg" );
}
}
Run Code Online (Sandbox Code Playgroud)
在您的视图中,构造图像并使用图像ID使用控制器和操作构建图像的路径.
<img src='<%= Url.Action( "show", "image", new { id = ViewData["imageID"] } ) %>' />
Run Code Online (Sandbox Code Playgroud)
接受使用此答案的答案:
<img src='<%= Url.Action( "show", "image", new { id = ViewData["imageID"] } ) %>'
Run Code Online (Sandbox Code Playgroud)
很好,但mvc 4过时了.更新的语法现在应该是:
<img src='@Url.Action( "show", "image", new { id = ViewData["imageID"] })' />
Run Code Online (Sandbox Code Playgroud)
此外,我发现当我需要此功能时,我已经将其他数据传递给视图,因此使用Model而不是ViewData会很好.
public class MyModel {
public string SomeData {get;set;}
public int FileId {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
从您的控制器:
public ActionResult Index() {
MyEntity entity = fetchEntity();
MyModel model = new MyModel {
SomeData = entity.Data,
FileId = entity.SomeFile.ID
};
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
最后从您的角度来看:
<img src='@Url.Action("show", "image", new { id = Model.FileId })' />
Run Code Online (Sandbox Code Playgroud)
控制器上接受答案的"显示"方法可以工作,但我会更改硬编码的"image/jpg"以使用File.ContentType - 您可以将其与byte []一起存储,这样您就不需要猜测用户正在上传自己的图片.
这里的每个答案都可能是正确的,但我认为最简单的方法是获取包含图像的字节数组或模型,然后像这样添加
<img src="data:image/jpeg;base64,@(Convert.ToBase64String(Model.Picture))">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78447 次 |
| 最近记录: |