Asp.net mvc 3 在ASP.NET MVC 3中使用ViewBag从控制器传递图像并在视图中显示
我想这很简单,但我不知道怎么做。在我的控制器中,我有:Asp.net mvc 3 在ASP.NET MVC 3中使用ViewBag从控制器传递图像并在视图中显示,asp.net-mvc-3,viewbag,Asp.net Mvc 3,Viewbag,我想这很简单,但我不知道怎么做。在我的控制器中,我有: public ViewResult ShowForm() { ViewBag.Title = Resources.ApplicationTitle; ViewBag.LabelStatus = Resources.Status; //Logo ViewBag.Logo =@"C:\Images\Logo.png";
public ViewResult ShowForm()
{
ViewBag.Title = Resources.ApplicationTitle;
ViewBag.LabelStatus = Resources.Status;
//Logo
ViewBag.Logo =@"C:\Images\Logo.png";
return View("ShowForm");
}
在我看来,我尝试这样做:
<div id="drawForm">
<img src="@ViewBag.Logo" alt="Logo" />
</div>
然而,当我运行这个程序时,我只得到“Logo”文本。您需要一个ImageController来渲染它 见此: 这是: 拥有控制器后,可以按如下方式渲染:
public class ImageController{
public ActionResult ShowImage(string path)
{
return File(path);
}
}
在你看来:
<img src="@Url.Action("Render","Image", new {id =1 // or path })" />
使用
Server.MapPath
获取图像的正确路径。假设您的图像文件夹位于通常包含在MVC项目中的Content
文件夹中。您可以这样做:
public ViewResult ShowForm()
{
//Logo
ViewBag.Logo = Server.MapPath("~") + @"Content\Images\Logo.png";
return View("ShowForm");
}
您不必更改视图中的代码。尝试以下方法:
ViewBag.Logo = Url.Content("~/Content/Images/Logo.png");
public ActionResult ShowForm()
{
ViewBag.Title=Resources.ApplicationTitle;
ViewBag.LabelStatus=Resources.Status;
//标志
byte[]imgbytes=File.ReadAllBytes(@“C:\Images\Logo.png”);
返回文件(imgbytes,“image/png”);
}
我明白了。我希望事情会简单一些,但我猜事情就是这样。谢谢,不客气。依我看,这是最简单的方法,一般来说可以解决你的问题。但是有一种更好的方法,使用图像大小调整工具进行一些设置。确保以最有效的方式提供图像的工具。那么,是在页面加载期间还是在向服务器请求时?图像很可能会保存在服务器上,但是页面内容应该在页面加载之前从数据库中收集,所以我猜是在页面加载过程中。这是一个包含图片的表单,有人已经创建了,当用户要求时,我只需重新绘制。我在我的博客上分享你的代码:非常感谢!!!
public ActionResult ShowForm()
{
ViewBag.Title = Resources.ApplicationTitle;
ViewBag.LabelStatus = Resources.Status;
//Logo
byte[] imgbytes = File.ReadAllBytes(@"C:\Images\Logo.png");
return File(imgbytes , "image/png");
}
<div id="drawForm">
<img src="controllerName/ShowForm" alt="Logo" />
</div>