2016-04-06 2 views
0

Im пытается загрузить файл, но он не работает должным образом. У меня есть следующий вид:HttpPostedFileBase Is 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 всегда приводит в нуль. Я не понимаю, почему. Кто может помочь мне найти проблему?

ответ

1

Проблема заключается в том, что вы используете помощника Ajax.BeginForm() для создания и публикации формы. Однако файлы не могут быть загружены с помощью AJAX.

Возможно, вы захотите рассмотреть вопрос о использовании jQuery-based plug-in to accomplish this, который опирается на использование для обработки ваших загрузочных операций за кулисами и размещения их в нужном месте.

В противном случае вы можете попробовать обычную форму, используя Html.BeginForm(), который должен работать в вашем сценарии (если вам явно не нужна какая-либо функциональность AJAX).

Update

Еще одна проблема в том, что конструктор, который вы используете для Ajax.BeginForm() вызова, принимающей AjaxOptions и htmlAttributes параметр, который попадает в как с помощью этого конструктора

Однако, текущее использование отсутствует третий параметр RouteValues. Вы можете попробовать добавить null туда, чтобы увидеть, если это делает никакой разницы:

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

Я не думаю, что это проблема, потому что на моей машине дома, это работает. Я получил код из TFS, а затем попробовал на другом компьютере, и это не работает. – Bryan

+0

Когда я смотрю в консоль, я вижу, что POST сделан в http: // localhost: 65148/NewProfile/RegisterBand? Length = 10 What Is Length здесь? – Bryan

+0

@ Брайан Тот же браузер на «другом компьютере»? У меня такое ощущение, что то, что вы делаете, не поддерживается во всех браузерах. – spender

Смежные вопросы