3

こんにちは、画像を投稿するときに問題が発生しているようです。stackoverflow や、このトピックについて議論している他のフォーラムで多くの質問を確認しましたが、必要な回答が得られないようです。私のコードは次のとおりです。

@using( Html.BeginForm("Create", "ProductManager", FormMethod.Post, new{enctype = "multipart/form-data"})){

    <ul>
        ....
        <li>
             @Html.LabelFor(model => model.ProductImagePath , "Avatar")
             <input type="file" id="ProductAvatar" name="ProductAvatar" />
             @Html.HiddenFor(model => model.ProductImagePath , new { id = "AvatarHiddenField"})
        </li>
         <li>
             @Html.LabelFor(model => model.ProductName , "Product Name")
             @Html.EditorFor(model => model.ProductName)
         </li>
         .....
    </ul>
}
[HttpPost]
        public ActionResult Create( FormCollection collection ,  HttpPostedFileBase avatar)
        {
            string file = collection["ProductAvatar"];
            var avatars = avatar;
        }

デバッグから、HttpPostedFileBase が null を返すことがわかりました。コレクション内の他のフォーム データは正常に投稿されます。画像のみが投稿されません。FormCollection または HttpPostedFileBase から ProductAvatar にアクセスできないようです。投稿されていないようです。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

6

アクションメソッドのパラメータ名は、ファイルの入力名と一致する必要があります。

だからこれで:

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

次のようなメソッドシグネチャが必要になります。

public ActionResult Create(FormCollection collection, HttpPostedFileBase productAvatar)
于 2013-01-09T01:02:05.177 に答える
6

HttpPostedFileパラメータの名前をフォームの入力ファイルと同じ名前に変更する必要があります。または、入力ファイルRequest.Filesの属性を使用して取得することもできnameます。次のようなことを試してください。

[HttpPost]
public ActionResult Create(FormCollection collection)
{
   HttpPostedFileBase file = Request.Files["ProductAvatar"];

   if (file.ContentLength > 0)
   {
      file.SaveAs(/* path */);
   }

   // othyer tasks

   return RedirectToAction("Index");
}

このname属性は、送信時にブラウザーが post/get フォームで送信するものです。

于 2013-01-09T00:36:47.973 に答える