2012-11-14 66 views
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從控制器。 什麼是解決方案?如何做這項工作?

+0

什麼?你能改說嗎? – gdoron

+0

@gdoron我編輯的問題。 – user197508

+0

這是控制器索引行動預計將返回HTML與IMG在它呢? – Igor

回答

2

如果您的操作返回圖像,則您的ViewBag將完全無用。當一個Action返回一個Image(通過FileResult,而不是你所做的)時,它會被髮送到瀏覽器,之後你不能再使用ViewBag來做任何事情。

如果你想呈現圖片和文字,最好的方法是返回一個標準的CSHTML視圖,在其中可以顯示圖片和文字。您可以在Action中(這很奇怪但可以接受)保存圖像,並將URL傳遞給視圖,該視圖可以將其放入一個img html標記中。更好的方法是創建一個單獨的Action來生成映像本身,並返回FileResult

+0

請用一個例子顯示我如何「在操作中保存圖像」。 – user197508

+0

我的viewbag與圖像相關,必須在同一個控制器中一起生成。 – user197508

+0

我可以在此控制器中調用另一個操作方法,並將文本傳遞給該操作方法並返回一個視圖? – user197508

0

您可以創建一個返回部分視圖的操作。您可以將動態生成的圖像保存在某個物理位置,並將其引至圖像src。如果您不想保存圖像,則可以將圖像轉換爲base-64編碼的字符串,並將其設置爲src屬性。