0

ファイルのアップロードに問題があります。編集ビューからアップロードしたい:

    <% 
    using (Html.BeginForm("edit","profile",FormMethod.Post, new { enctype="multipart/form-data" }))
    {%>
    <%: Html.ValidationSummary(true) %>

    <%: ViewData["ErrorMessage"] %>
    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.Image) %>
        </div>
        <div class="editor-field">
            <input type="file" id="Image" name="Image" />
            <label id="LabelErrorImage" class="errorMessage" />
        </div> 

        <p>
            <input type="submit" value="Save" onclick="return Validate(); return false;"/>
        </p>
    </fieldset>

<% } %>

HttpPostedFileBaseクラスを使用したい。私の編集アクション:

[Authorize]
        [HttpPost]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(string id, HttpPostedFileBase file, FormCollection formValues)
        {
                    if (ModelState.IsValid)
                    {

                        if (file != null && file.ContentLength > 0)
                        {
                            CustomHelpers.createFolder();
                            var tmpPath = MyConfig.UPLOAD_FILE_PATH + "/" + Membership.GetUser().ProviderUserKey.ToString();
                            var path = Path.Combine(Server.MapPath(MyConfig.UPLOAD_FILE_PATH), "Avatar");
                            var fileExtension = Path.GetExtension(file.FileName);
                            file.SaveAs(path);
                            user.Image = "Avatar";
                        }
                        adventureDB.SaveChanges();

                        return RedirectToAction("Index");
                    }
        }

しかし、私は常にファイルオブジェクトを空にしています、なぜ????? なぜそれがそのように機能することができるのか、何かアイデアや提案はありますか?たぶん、ファイル値を編集アクションに渡す方法に問題がありますか?


編集: 私が削除するときでさえ、それは本当に奇妙です
using (Html.BeginForm("Index","Profile",FormMethod.Get, new { enctype="multipart/form-data" }))

ページソースにはまだ次のものがあります。

<body>

    <form method="post" action="6111e591-b92d-4bcb-b214-ab8f664b35f9" id="form1">

タグを変更することはできませんが、理由がわかりません:/

4

3 に答える 3

1

変更してみてください:-

public ActionResult Edit(string id, HttpPostedFileBase file, 
  FormCollection formValues)

に:-

public ActionResult Edit(string id, HttpPostedFileBase image, 
  FormCollection formValues)

入力の名前はimage

 <input type="file" id="Image" name="Image" />

編集 正直なところ、他の何かが画像のバインドを停止しています。これはあなたが投稿したフォーム全体ですか?

テストするいくつかのこと

  1. HTTPOSTでメソッドを2回装飾していますが、これで違いが生じるとは思いません。
  2. ソースを表示し、ソースに他に名前がないことを確認しname=imageます。
  3. 再テストする前に、キャッシュを空にし、ソースが正しいことを確認してください
  4. 使ってみてください<form action="/profile/index" method="post" enctype="multipart/form-data">
  5. 最後の編集から判断すると、マスターページ/レイアウトに問題がありますか?これはMVC/Webフォームのハイブリッドですか?
于 2011-06-08T16:37:29.770 に答える
1

この問題の解決策は次のとおりです。

  1. Master.Siteを使用します。
  2. ビューにファイルをアップロードしたいのですが、
  3. 私たちはそれがうまくいくはずだと確信していますが、私たちはいつもnullを持っています、

それで:

  1. みんな正しかった-私は私の見解で間違った名前を持っていた-それをチェックしてください!
  2. ビューのソースコードを確認し、2つの<form>タグがある場合は、マスターサイトから<form>タグを削除する必要があります。そうすると、2番目のタグは無視されます。

これで動作するはずです。

于 2011-06-09T09:23:37.480 に答える
0

さて、あなたのビューでは、ファイル入力に「image」という名前を付けましたが、アクションメソッドは「file」というパラメータを受け入れます。それらの1つに名前を変更すると、機能するはずです。

于 2011-06-08T16:37:46.567 に答える