2016-04-06 37 views
0

ファイルをアップロードしようとしていますが、期待どおりに動作しません。 私は次のビューがあります。HttpPostedFileBaseがnullです

@using (Ajax.BeginForm("RegisterBand", "NewProfile", new AjaxOptions() { HttpMethod = "Post", 
      InsertionMode = InsertionMode.Replace, 
     }, new { enctype = "multipart/form-data"})) 
     { 
      @Html.AntiForgeryToken() 
      @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 


      <div class="form-horizontal"> 
       <div class="form-group"> 
        <div class="col-md-10"> 
         Bandname 
        </div> 
        <div class="col-md-10"> 
         @Html.EditorFor(x => x.BandProfile.Name, new { htmlAttributes = new { @class = "form-control" } }) 
         @Html.ValidationMessageFor(x => x.BandProfile.Name, "", new { @class = "text-danger" }) 
        </div> 
       </div> 

       <div class="form-group"> 
        <div class="col-md-10"> 
         Genres 
        </div> 
        <div class="col-md-10"> 
         @Html.DropDownListFor(x => x.BandProfile.Genres, Enumerable.Empty<SelectListItem>(), new { @class="", multiple = "multiple", style ="width: 100%;"}) 
         @Html.ValidationMessageFor(x => x.BandProfile.Genres, "", new { @class = "text-danger" }) 
        </div> 
       </div> 

       <div class="form-group"> 
        <div class="col-md-10"> 
         Coverpicture 
        </div> 

        <div class="col-md-10"> 
         <input type="file" name="file" id="CoverPicture" /> 

         @Html.ValidationMessageFor(x => x.BandProfile.CoverPicture, "", new { @class = "text-danger" }) 
        </div> 
       </div> 

       <div class="form-group"> 
        <div class="col-md-10"> 
         Description 
        </div> 
         <div class="col-md-10"> 
          @Html.EditorFor(x => x.BandProfile.Description, new { htmlAttributes = new { @class = "form-control"} }) 
          @Html.ValidationMessageFor(x => x.BandProfile.Description, "", new { @class = "text-danger" }) 
         </div> 
        </div> 

       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <input type="submit" value="Spara" class="btn btn-success" /> 
        </div> 
       </div> 
      </div> 
     } 

はここに私のコントローラである:

[HttpPost] 
     public ActionResult RegisterBand(ProfileViewModel model, HttpPostedFileBase file) 
     { 
      if (ModelState.IsValid == false) 
      { 
       return Json(JsonRequestBehavior.AllowGet); 
      } 

      var bandProfile = _profileService.CreateBandProfile(model.BandProfile, file, UserId); 

      if (bandProfile != null) 
      { 
       userManager.AddToRole(UserId, "Band"); 
       return RedirectToAction("Index", "Welcome"); 
      } 
      return View("Index"); 
     } 

fileは常にnullでは結果は私が持っている問題です。なぜ私は理解できません。問題を見つけるのを助けることができる人は誰ですか?

答えて

1

ここでの問題は、Ajax.BeginForm()ヘルパーを使用してフォームを作成して投稿していることです。ただし、AJAXを使用してファイルをアップロードすることはできません。

を使用して、舞台裏でのアップロード操作を処理し、適切な場所に投稿することに依存するjQuery-based plug-in to accomplish thisを使用することをおすすめします。

それ以外の場合は、Html.BeginForm()を使用して通常のフォームを試してみることができます(これは明示的にAJAX機能が必要ない場合)。

更新

ここでもう一つの問題は、あなたのAjax.BeginForm()通話に使用しているコンストラクタがしかし、このコンストラクタ

と同じように落ちるAjaxOptionshtmlAttributesパラメータ、あなたの現在の使用を受け入れていることです3番目のRouteValuesパラメータが欠落しています。

@using(Ajax.BeginForm("RegisterBand", 
         "NewProfile", 
         null, 
         new AjaxOptions() { 
          HttpMethod = "Post", 
          InsertionMode = InsertionMode.Replace 
         }, 
         new { enctype = "multipart/form-data"})){ 
    <!-- Content --> 
} 
+0

私はこの作品、自宅にいるため私のマシン上でこれが問題であるとは思わない:あなたはそれが何の違いを作るかどうかを確認するためにそこにnullを追加してみてください。私はTFSからコードを入手し、別のコンピュータで試しましたが、これはうまくいきません。 – Bryan

+0

コンソールを見ると、POSTはhttp:// localhost:65148/NewProfile/RegisterBand?Length = 10ここには何の長さですか? – Bryan

+0

@ブライアン "別のコンピュータ"と同じブラウザ?私は、あなたがやっていることは、すべてのブラウザでサポートされていないと感じています。 – spender

関連する問題