0

私はMVC(オブジェクト指向のC#exeアプリから来ています)とStackoverflowを初めて使用します。私はMVCを使用してコードを効率的に実行しようと苦労してきました。データベースから返されるモデルデータがあり、そのデータとともにjpegイメージであるバイトのフィールドがあります。この段階で、データベースを1回呼び出しました...

今私が立ち往生しているのは、入力されたモデルデータがレンダリングされるビューに入ると、それを単純にループして各データ行に画像をレンダリングすることはできないということです。それを機能させるために私が見つけた唯一のことは、FileContentResultを返すActionメソッドを呼び出すことですが、これには、画像ごとにデータベースへの新しい呼び出しが必要です。

解決策として、次の問題を解決する3つの異なるアプローチを試しました。

  1. MVCがビューでFileContentResultを受信する方法を満たすために、Actionメソッドを介してバイト配列をコントローラーに戻すことができないようです。Actionメソッドは、単純な型のみを受け入れたいと考えています。
  2. 特に、モデルデータのエントリごとに数回のラウンドトリップが発生する場合は特に、ビューに既にあるバイトデータのデータベースに戻るようにコントローラーに要求したくありません。
  3. Data Uriの使用は機能しますが、まだ十分なブラウザーでサポートされていません。

誰かがこのような問題を処理するための最良の方法を教えてもらえますか?問題1または2で作業する必要がありますか、それとも私が見逃している別のアプローチがありますか?

FileContentResultをレンダリングできるように、バイト配列をコントローラーに戻すために問題1で最初に使用しようとしたコードを次に示します。

<img src=" @{Html.RenderAction("RenderMemberImage", "Home", new { @pic = x.ThumbnailData });}" />

[HttpGet]
    public FileContentResult RenderMemberImage(byte[] pic)
    {
        return new FileContentResult(pic, "mime/jpeg");
    }
4

2 に答える 2

1

考えられる解決策の1つは、バイトをBase64表現に変換し、それを子オブジェクトのプロパティとして保持することです。

public class Child
{
  public string ImageURL { set;get;}
  //other properties & construct etc 
}
public class Master
{
  IEnumerable<Child> Children { set;get;}
}

GETアクションで

public ActionResult SomeGetACtion()
{
  var master=new Master();

  foreach(itm in someCollection)
  {
    var child=new Child();

    byte[] imageData = GetImageByte(); //get your byte data;
    string imageBase64 = Convert.ToBase64String(imageData);
    child.ImageURL = string.Format("data:image/gif;base64,{0}", imageBase64);
    master.Children.Add(byte);
  }
}

このようなビューで使用できます

@foreach(child in Model.Children)
{
  <img src="child.ImageURL" alt="loding.." />

}
于 2012-07-06T17:28:46.787 に答える
0

問題は、ブラウザからサーバーにバイト配列を送信しようとしていることです。次のようなものを試してください。

(私はこれをコンパイルしていませんが、近いはずです)

<img src=" @{Html.Action("RenderMemberImage", "Home", new { @picId = x.Id });}" />

[HttpGet]
public FileContentResult RenderMemberImage(Guid picId)
{
    var pic = new Models.Picture(picId);//or however you get your data out of the DB
    return new FileContentResult(pic.ThumbnailData , "mime/jpeg");
}

基本的に、ページ上の画像ごとに、ブラウザはサーバーに画像を取得するように要求します。

于 2012-07-05T18:55:34.147 に答える