使用ASP.NET MVC 3中的ViewBag从控制器传递图像并在视图中显示

时间:2013-04-22 08:25:58

标签: asp.net-mvc-3 viewbag

我想这是非常直接的事情,但我无法知道如何做到这一点。在我的控制器中,我有:

 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>

然而,当我运行这个时,我只得到“徽标”文字。

4 个答案:

答案 0 :(得分:5)

使用Server.MapPath获取图像的正确路径。假设您的images文件夹位于通常包含在MVC项目中的Content文件夹中。你可以这样做:

public ViewResult ShowForm()
{
    //Logo
    ViewBag.Logo = Server.MapPath("~") + @"Content\Images\Logo.png";
    return View("ShowForm");
}

您无需更改视图中的代码。

答案 1 :(得分:4)

试试这个:

ViewBag.Logo = Url.Content("~/Content/Images/Logo.png");

答案 2 :(得分:3)

你需要一个ImageController来渲染它。

见:

ASP.NET MVC3: Image loading through controller

并且: Can an ASP.NET MVC controller return an Image?

一旦有了控制器,就可以按如下方式进行渲染:

public class ImageController{

public ActionResult ShowImage(string path) 
{

    return File(path);
}

}

在您的观点中:

<img src="@Url.Action("Render","Image", new {id =1  // or path })" />

答案 3 :(得分:1)

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>