ASP.Net MVC如何在视图中显示模型的图像属性?

7

我是asp.net mvc的新手,但我正在尝试使用GDI+制作一个有趣的应用程序,并且需要在asp.net mvc中进行一些图像查看。

我有一个模型,其中包含一个图像属性:

namespace DomainModel.Entities
{
    public class BackgroundImage
    {
        // Properties
        public Image Image {get; private set; }

        public BackgroundImage()
        {
            Image = Image.FromFile(@"D:\ProjectZero\DomainModel\image\bkg.PNG");

        }
    }
}

控制器向视图发送以下内容:
public ActionResult Index()
        {

            BackgroundImage bkImg = new BackgroundImage(); 
            return View(bkImg);
        }

视图如下所示:
<p> Height: </p><%= Model.Image.Height //it prints the height of the image %> </br>
<p> Width: </p><%= Model.Image.Width //it prints the width %> </br>
<p> Image: </p><%= Model.Image //does not work to display the image %>

如何显示图片属性?

我需要将背景图片用于一个div。我不需要调整图片大小,只需要以其正常尺寸显示。

是否有我所缺少的Html助手?

谢谢您的时间!

2个回答

16

您需要编写一个控制器动作,将图像写入响应流,并设置正确的内容类型为"image/png"。然后您可以在视图中使用img标签引用此动作:

public ActionResult Image()
{
    byte[] image = GenerateImage();
    return File(image, "image/png");
}

并且在你的视图中:

<img src="<%= Url.Action("Image") %>" alt="" />

1
这解决了我的问题,但我需要使用以下代码将图像转换为字节数组:public byte[] imageToByteArray(System.Drawing.Image imageIn) { MemoryStream ms = new MemoryStream(); imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray(); } - user171910
1
我已经尝试了两天,一直在使用HttpHelpers、派生的ActionResults称为ImageResults,但都没有进展。这个解决方案第一次就奏效了,太棒了! - Andy Clark
上面的视图代码示例中缺少“@”符号。 <img src="@Url.Action("Image")" /> - kroiz
1
@kroiz,这是因为此处给出的示例使用的是WebForms视图引擎,而Razor中没有@符号的概念。在WebForms视图引擎中,您需要使用<%%>来呈现服务器端代码。 - Darin Dimitrov

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接