0

たとえば、名前、年齢、画像(byte [])を持つ従業員など、dbからフェッチするコントローラーで同じアクションがあります。

そのため、情報をViewBagに保存します。次に、ビューで画像の特定のコードは次のとおりです。

<img src="@ViewBag.Image" alt="Logo" />

しかし、私が持っている応答の内容を見るとき:

<img src="System.something.FileContentResult" alt="Logo" />

コントローラの特定のアクションからFileContentResultを取得する例をたくさん見てきました。たとえば、次のようになります。

(コードは一例です)

public ActionResult GetEmployeeImage (int id){
    byte[] byteArray = GetImageFromDB(id);
    FileContentData file = new File (byteArray,"image/jpg");
    return file;
}

次に、次のコマンドで画像をレンダリングします。

<img src="@Url.Action("GetEmployeeImage", "Home", new { id = ViewBag.Id })" alt="Em" />

しかし、私はすでにイメージを持っているので、それを望んでいません。

ViewBagをスローするビューにレンダリングするにはどうすればよいですか?

ありがとう!

PD:ビューでの画像のレンダリングは同じですが、結論が出ていません

4

2 に答える 2

5

1つの可能性は、データURIスキームを使用することです。ただし、これはそれをサポートするブラウザでのみ機能することに注意してください。アイデアは、画像データをbase64文字列としてタグのsrc属性に埋め込むことです。img

<img src="data:image/jpg;base64,@(Html.Raw(Convert.ToBase64String((byte[])ViewBag.Image)))" alt="" />

一方、すべてのブラウザで機能するソリューションが必要な場合は、コントローラアクションを使用して画像を提供する必要があります。したがって、最初のリクエストでは、画像ではなく、従業員のid、name、ageプロパティのみをフェッチします。次に、従業員IDをパラメーターとして受け取り、データベースにクエリを実行し、対応する画像をフェッチしてファイル結果として返すコントローラーアクションを記述します。次に、ビューポイント内で、imgタグのsrc属性がこのコントローラーアクションになります。

于 2012-05-09T05:55:57.410 に答える
0

@darinの回答に基づいて、コントローラーのアクションを呼び出して作成したい場合は、次のようにします。

      public FileContentResult GetFileByID(string ID)
    {
        try
        {
            // Get the object from the db
                Ent ent = Biz.GetPatientsByID(ID);
               // Convert the path to byte array (imagepath is something like: \\mysharedfolder\myimage.jpg
                byte[] doc = EFile.ConvertToByteArray(ent.ImagePath);
                string mimeType = File(doc, MimeMapping.GetMimeMapping(Path.GetFileName( ent.ImagePath))).ContentType;
                Response.AppendHeader("Content-Disposition", "inline; filename=" + Path.GetFileName(ent.ImagePath));
                return File(doc, mimeType);

   

        }
        catch (Exception ex)
        {

            throw ex;
        }

}

フロントエンド:

                        <img id="ItemPreview" src="@Url.Action("GetFileByID","Patient", new {ID= Model.ID })" alt="" width="350" height="350" />

ここで、Patientはコントローラー名です。

于 2021-11-09T12:46:17.103 に答える