1

私の MVC(4) アプリケーションでは、ローカル ディレクトリから画像ファイルを取得し、ブラウザに表示しています。

model詳細を保存するcontroller必要があり、ファイルを取得してview表示する必要があります。

モデル

public class ImageModel
{
    List<string> _images = new List<string>();

    public ImageModel()
    {
        _images = new List<string>();
    }

    public List<string> Images
    {
        get { return _images; }
        set { _images = value; }
    }
}

コントローラ

public ActionResult Index()
{
    var imageFiles = new ImageModel();
    imageFiles.Images.AddRange(Directory.GetFiles(@"c:\mypath"));
    return View(imageFiles);
}

意見

@for (int imgIndex = 0; imgIndex < Model.Images.Count; imgIndex++)
{
    <div >
      <img src = @Model.Images[imgIndex] alt="Image"  />
    </div>
}

しかし、ブラウザで画像を表示できません。空のボックスが表示されていaltます。

ここで何を見逃したのですか?物理的な場所ではなく、仮想ディレクトリを作成する必要がありますか?

4

3 に答える 3

2

まず、ローカル ファイルにはfile:// URI スキームが必要です。ネイティブ ファイル パスを img src として使用しているようです。

ただし、ブラウザーのセキュリティ モデルでは、Web サーバー (http://、https:// プロトコル) によって提供されるページ内からローカル ソースを使用することは禁止されています。

状況を修正するには、目的の画像ファイル名をパラメーターとして受け取るコントローラーを実装し、File() アクションを使用してそのコンテンツを提供します。

于 2013-05-31T05:59:42.660 に答える
0

コードスニペットを見ると、パスを引用符で囲むのを忘れているようです

<img src = "@Model.Images[imgIndex]" alt="Image"  />

しかし、コード全体を見ると、相対パスを使用することをお勧めします。

UPD: より詳細な説明については、このブログ投稿をお勧めします

于 2013-05-31T06:03:12.843 に答える
0

問題はパス名です。これは役立つかもしれません:

コントローラー:

public ActionResult Index()
{
        var imageFiles = new ImageModel();
        imageFiles.Images.AddRange(System.IO.Directory.GetFiles(@"C:\wherever\files\are\"));
        for (int i = 0; i < imageFiles.Images.Count; i++)
        {
            // get rid of the fully qualified path name
            imageFiles.Images[i] = imageFiles.Images[i].Replace(@"C:\wherever\files\are\", "");
            // change the slashes for web
            imageFiles.Images[i] = imageFiles.Images[i].Replace('\\','/');
        }
        return View(imageFiles);
}

意見:

@for (int imgIndex = 0; imgIndex < Model.Images.Count; imgIndex++)
{
    <div >
      <img src = "@Model.Images[imgIndex]" /> <!-- put the file in quotes -->
    </div>
}
于 2013-05-31T06:15:51.490 に答える