2015-04-28 5 views
0

Я создаю страницу в Asp.Net MVC, где пользователь может загрузить файл, а также подробную информацию о файле из текстовых полей.Viewmodel всегда null после загрузки файла

Для этого я использую viewmodel и очень простую конфигурацию метода. Эта страница заполняется правильно методом [Get], и пользователь может выбрать файл и ввести данные, но после нажатия кнопки «Отправить» и вызывается метод [Post], модель просмотра полностью равна нулю.

Я сделал свое исследование по этому вопросу и не пытался:

  • добавления ENCTYPE = «многослойных/форма-данные»
  • просто используя файл в качестве отдельного параметра

Чтобы не помогло.

Вот мои методы контроллера:

public ActionResult FileComment(int id) 
{ 
    //set up [get] view 

    return View("FileComment", obj); 
} 

//THIS METHOD's VIEWMODEL ALWAYS NULL 
[HttpPost] 
public ActionResult FileComment(CalibrationCommentViewModel file) 
{ 
    //save file to database 

    return View("Edit", new { id = file.id }); 
} 

Вот часть моей точки зрения:

@using (Html.BeginForm("FileComment", "Calibration", FormMethod.Post, new { enctype = "multipart/form-data", @data_ajax = "false" })) 
{ 
    @Html.HiddenFor(m => m.ID) 
    <div class="container"> 
     <h4>Add File for @Model.ID</h4> 
     <hr /> 
     <div class="row"> 
      <div class="col-md-1">g 
       @Html.LabelFor(model => model.file, htmlAttributes: new { @class = "control-label" }) 
      </div> 
      <div class="col-md-2"> 
       @Html.TextBoxFor(model => model.file, new { type = "file" }) 
      </div> 
      <div class="col-md-9"></div> 
     </div> 
     <br /> 
     <div class="row"> 
      <div class="col-md-1"> 
       @Html.LabelFor(model => model.attachmentType, htmlAttributes: new { @class = "control-label" }) 
      </div> 
      <div class="col-md-2"> 
       @Html.DropDownListFor(model => model.attachmentType, Model.attachTypeList, new { @class = "form-control" }) 
      </div> 
      <div class="col-md-9"></div> 
     </div> 
     <br /> 
     <div class="row"> 
      <div class="col-md-1"> 
       @Html.LabelFor(model => model.Date, htmlAttributes: new { @class = "control-label" }) 
      </div> 
      <div class="col-md-2"> 
       @Html.EditorFor(model => model.Date) 
      </div> 
      <div class="col-md-9"></div> 
     </div> 
     <br /> 

     <div class="row"> 
      <div class="col-md-1"> 
       @Html.LabelFor(model => model.description, htmlAttributes: new { @class = "control-label" }) 
      </div> 
      <div class="col-md-2"> 
       @Html.TextAreaFor(model => model.description, new { cols=35, @rows=3}) 
      </div> 
      <div class="col-md-9"></div> 
     </div> 

     <br /> 
     <div class="row"> 
      <div class="col-md-1"></div> 
      <div class="col-md-2"> 
       <button type="submit" onclick="JavascriptFunction()">Add to @Model.ID</button> 
      </div> 
      <div class="col-md-9"></div> 
     </div> 

    </div> 
} 

ответ

0

Изменить

public ActionResult FileComment(CalibrationCommentViewModel file) 

в

public ActionResult FileComment(CalibrationCommentViewModel model) 
+0

Dang даже не подумал об этом, спасибо! –

0

В вашем взгляде отсутствует ссылка для просмотра модели в верхней части вида примерно @model Названиеofyourproject.Models.CalibrationCommentViewModel

+0

Я сказал, что это была ЧАСТЬ моего взгляда. Я, конечно, включил мою сильно типизированную модель наверху. –

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