0

我有一个控制器,它可以在飞行中制作图像并将其返回到ViewBag 中带有文本的视图,

public partial class TextController : Controller
{

    public virtual ActionResult Index(bool noisy = true)
    {

    //image stream
    FileContentResult img;

    using (var mem = new MemoryStream())
    using (var bmp = new Bitmap(130, 30))
    using (var gfx = Graphics.FromImage((Image)bmp))
    {
        gfx.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
        gfx.SmoothingMode = SmoothingMode.AntiAlias;
        gfx.FillRectangle(Brushes.White, new Rectangle(0, 0, bmp.Width, bmp.Height));

        //add question
        gfx.DrawString(text, new Font("Tahoma", 15), Brushes.Gray, 2, 3);

        //render as Jpeg
        bmp.Save(mem, System.Drawing.Imaging.ImageFormat.Jpeg);
        img = File(mem.GetBuffer(), "image/Jpeg");
    }
    ViewBag.text = text;
    return img;
}

我想从控制器返回一个图像和 ViewBag。什么是解决方案?我该怎么做?

4

2 回答 2

2

如果您的操作返回图像,您的 ViewBag 将完全没用。当一个 Action 返回一个 Image (通过FileResult,而不是你做的方式),它被发送到浏览器,你以后不能使用 ViewBag 对它做任何事情。

如果要显示图像和文本,最好的方法是返回一个标准的 CSHTML 视图,您可以在其中显示图像和文本。您可以在操作中保存图像(这很奇怪但可以接受)并将 URL 传递给可以将其放入imghtml 标记的视图。更好的方法是创建一个单独的 Action 来生成图像本身并返回 FileResult

于 2012-11-14T20:54:58.960 回答
0

您可以创建一个返回局部视图的操作。您可以将动态生成的图像保存在某个物理位置并将其引用到图像 src。如果您不想保存图像,可以将图像转换为 base-64 编码字符串并将其设置为 src 属性。

于 2012-11-15T09:49:24.027 回答