0

画像パスを格​​納するコントローラーのポストバック イベントにビュー バッグを作成しました。次に、このビューバッグの値を画像のsrc属性で使用しましたが、画像が表示されません。

モデル:

public class FileManagement
     {
    public string FileName { get; set; }
    public string Path { get; set; }
      }

画像をアップロードするためのコード

      [HttpPost]
      public ActionResult UploadPic(FileManagement fmanage, HttpPostedFileBase file)
      {
        string email = User.Identity.Name;

        if (file != null && file.ContentLength > 0)
        {
            var FileName = string.Format("{0}.{1}", Guid.NewGuid(), Path.GetFileName(file.FileName));
            var path = Path.Combine(Server.MapPath("~/Content/Uploads"), FileName);
            file.SaveAs(path);

         using (var session = DocumentStore.OpenSession("RavenMemberShip"))
            {

                var query = from q in Session.Query<Registration>() where q.Email == email select q;
                if (query.Count() > 0)
                {
                    foreach (var updated in query)
                    {
                        updated.FileName = FileName;
                        updated.Path = path;
                        session.SaveChanges();

                    }
                }
            }
        }
        else ModelState.AddModelError("", "Remove the errors and try again");
        return View();
    }

コントローラ

    [HttpGet]
    public ActionResult DisplayPic()
    {
        ViewBag.Imagepath = "C:\\Users\\Wasfa\\Documents\\Visual Studio 2012\\Projects\\MvcMembership\\MvcMembership\\App_Data\\Uploads\\annonymous.jpg";

        return View();
    }

    [HttpPost]
    public ActionResult DisplayPic(FileManagement fm)
    {


        using (var session = DocumentStore.OpenSession("RavenMemberShip"))
        {
            string ipath;
            //  string UserName = User.Identity.Name;
            string UserName = "wasfa_anjum@yahoo.com";
            var getPath = from p in Session.Query<Registration>()
                          where p.Email == UserName
                          select p;
            if (getPath.Count() > 0)
            {
                foreach (var imgpath in getPath)
                {

                    ipath = imgpath.Path;
                    ViewBag.Imagepath = ipath;
                }

           }

        }
        return View();
    }

意見:

    @using (Html.BeginForm())

   {
    <div>
    <img src="@Url.Content(ViewBag.Imagepath)" width="200" height="200" />
    </div>
    <input type="submit" value="Display" />
   }
4

4 に答える 4

2

私の意見では、問題は ASP.NET MVC に関係していませんが、HTML/Web の基本がいくつか欠けています。

リソース (html ファイル、画像など) にアクセスする場合は、HTTP URI 構文を使用する必要があることを理解しておく必要があります。Windows ファイル システムのパス構文を使用することはできませんし、使用すべきではありません。

C:\\Users\\Wasfa\\Documents\\Visual Studio 2012\\Projects\\MvcMembership\\MvcMembership\\App_Data\\Uploads\\annonymous.jpg"HTMLのようなものを使用するのは完全に間違っています。理解を深めるために、ユーザーがアクセスできるように ASP.NET MVC Web サイトを立ち上げて実行すると、ユーザーは Web ページにアクセスし、ブラウザーにダウンロードされる HTML は次のようになると想像してください。

<img src="C:\Users\Wasfa\Documents\Visual Studio 2012\Projects\MvcMembership\MvcMembership\App_Data\Uploads\annonymous.jpg" />

そのパスが彼らのコンピューターに存在すると思いますか? いいえ。

そのため、サーバーから画像を取得するようにタグに指示するには<img />、次のように完全な HTTP URI を指定する必要があります。

<img src="http://mywebsite.com/Content/Uploads/annonymous.jpg" />

または相対 HTTP URI (Web サイトのルート フォルダーからの相対パスのようなもの):

<img src="~/Content/Uploads/annonymous.jpg" />

あなたのアプローチのもう1つの問題は、それApp_Dataが特別なフォルダーであり、その内容がデフォルトではブラウザーからアクセスできないことです。したがって、ASP.NET MVC の規則に従ってContent、プロジェクト内にフォルダーを作成して、静的イメージやスタイル シェルなどのその他の静的コンテンツを保持し、それらにリンクすることができます。

これを行うと、デフォルトの画像の相対パスを ViewBag プロパティとして提供することを誰も止めません。

ViewBag.Imagepath = "~/Content/Uploads/annonymous.jpg";

そして、あなたが望む方法でそれを使用してください:

<img src="@Url.Content(ViewBag.Imagepath)" width="200" height="200" />

また、後でデータベースから取得するパスも、このスキームに従うことを期待しています。

于 2013-09-28T14:21:15.840 に答える
1
  • 画像のパスにはスラッシュ (/) が必要です。
  • 以上のタイプのパスは、ローカル システムでのみ機能し、サーバーでは機能しない可能性があります。
  • Server.MapPathあなたのパスを取得するために使用してみてください
  • 画像を表示するためにViewBagを使用するのは悪い考えです。モデルプロパティを使用して画像パスを保存し、使用することを検討してください

    <img src="@Url.Content(Model.ImagePath)" alt = "Image" />

編集

コントローラ:

    [HttpGet]
    public ActionResult DisplayPic()
    {
        FileManagement fm = new FileManagement();
        fm.Path = "Your image path";

        return View(fm);
    }

意見 :

`<img src="@Url.Content(Model.path)" alt = "Image" />`

コードをチェックしませんでしたが、これは機能するはずです。

于 2013-09-28T12:57:32.043 に答える