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

Action が Image を返す場合、ViewBag はまったく役に立ちません。Action が Image を (あなたが行った方法ではなくFileResultを介して) 返すと、ブラウザーに送信されます。後で ViewBag を使用してそれを処理することはできません。

画像とテキストを表示する場合、最適な方法は、画像とテキストを表示できる標準の CSHTML ビューを返すことです。アクション中に画像を保存し(これは奇妙ですが許容範囲です)、URLをビューに渡して、それをimghtmlタグ内に配置できます。FileResult を返す画像自体を生成する別の Action を作成する方がはるかに優れた方法です。

于 2012-11-14T20:54:58.960 に答える
0

部分ビューを返すアクションを作成できます。動的に生成された画像を物理的な場所に保存し、それを画像srcに参照することができます。画像を保存したくない場合は、画像をbase-64でエンコードされた文字列に変換し、src属性に設定できます。

于 2012-11-15T09:49:24.027 に答える