2015-07-23 3 views
1

Я пытаюсь загрузить CSV-файл в базу данных SQL, но действие контроллера, похоже, вообще не захватывает файл. Проверьте код, я должен отсутствовать часть:Действие контроллера не захватывает файл при просмотре при попытке загрузить

Вид:

@using (Html.BeginForm("UploadValidationTable", "Home", FormMethod.Post)) 
{ 
<table style="margin-top: 150px;"> 
    <tr> 
     <td> 
      <label for="csvFile">Filename:</label> 
     </td> 
     <td> 
      <input type="file" name="csvFile" id="csvFile"/> 
     </td> 
     <td><input type="submit" value="Upload"/></td> 
    </tr> 
</table> 
} 

Контроллер:

[HttpPost] 
    public JsonResult UploadValidationTable(HttpPostedFileBase csvFile) 
    { 
     var inputFileDescription = new CsvFileDescription 
     { 
      SeparatorChar = ',', 
      FirstLineHasColumnNames = true 
     }; 
     var cc = new CsvContext(); 
     var filePath = uploadFile(csvFile.InputStream); 
     var model = cc.Read<OutstandingCreditCsv>(filePath, inputFileDescription); 

     try 
     { 
      var entity = new OutstandingCreditCsv(); 

      foreach (var item in model) 
      { 
       entity.PoNumber = item.PoNumber; 
       entity.CreditInvoiceDate = item.CreditInvoiceDate; 
       entity.CreditInvoiceNumber = item.CreditInvoiceNumber; 
       entity.CreditInvoiceAmount = item.CreditInvoiceAmount; 

      } 
     } 
     catch(LINQtoCSVException ex) 
     { 

     } 

     return Json(model, "text/json"); 
    } 

csvFile просто появляясь как нуль, понятия не не то, что может быть происходит, поскольку он назван в представлении, и у меня есть метод post, окружающий его. Он делает это до var filePath = uploadFile(csvFile.InputStream);, а затем ломается, так как метод пытается передать нулевое значение. Благодаря!

ответ

2

Я наткнулся на это при попытке загрузить файлы в БД с помощью MVC некоторое время назад, я использовал scaffolded взгляды (так оно и передается обратно объект с формой), так что это может быть немного другой.

В вашем Html.BeginForm() вызов вам нужно добавить атрибут ENCTYPE = «многослойную/форма-данные»

@using (Html.BeginForm("UploadValidationTable", "Home", FormMethod.Post, new {enctype="multipart/form-data"})) 
+0

Ну как я подтверждал синтаксис был дан ответ ... 3 раза , Иди меня! –

1

Я думаю, что нужно добавить к вашему enctype='multipart/form-data'<form>

using (Html.BeginForm("UploadValidationTable", "Home", FormMethod.Post, 
          new { enctype = "multipart/form-data" })) 
0

Вам необходимо добавить следующие строки в форме декларации:

@using (Html.BeginForm("UploadValidationTable", "Home", null,FormMethod.Post, new { enctype = "multipart/form-data" })) 
1

Вы должны изменить форму декларации. Попробуйте добавить в объявление формы enctype = "multipart/form-data".

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

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