2012-06-18 48 views
9

我正在嘗試使用CSVhelper插件來讀取上傳的CSV文件。這裏是我的模型綁定器類:使用CSVHelper進行文件上傳

public class SurveyEmailListModelsModelBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var csv = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     var file = ((csv.RawValue as HttpPostedFileBase[]) ?? Enumerable.Empty<HttpPostedFileBase>()).FirstOrDefault(); 

     if (file == null || file.ContentLength < 1) 
     { 
      bindingContext.ModelState.AddModelError(
       "", 
       "Please select a valid CSV file" 
      ); 
      return null; 
     } 

     using (var reader = new StreamReader(file.InputStream)) 
     using (var csvReader = new CsvReader(reader)) 
     { 
      return csvReader.GetRecords<SurveyEmailListModels>().ToArray(); 
     } 
    } 
} 

這些都是我試圖映射到對象:

  • base {"You must call read on the reader before accessing its data."} CsvHelper.CsvHelperException {CsvHelper.CsvReaderException}

    public class SurveyEmailListModels 
    { 
        [Key] 
        [CsvField(Ignore = true)] 
        public int SurveyEmailListId { get; set; } 
    
        [CsvField(Index = 0)] 
        public int ProgramId { get; set; } 
    
        [CsvField(Index = 1)] 
        public virtual SurveyProgramModels SurveyProgramModels { get; set; } 
    
        [CsvField(Index = 2)] 
        public string SurveyEmailAddress { get; set; } 
    
        [CsvField(Index = 3)] 
        public bool SurveyResponded { get; set; } 
    
    } 
    

    Visual Studio調試器,我得到一個錯誤內幕

回答

14

不使用插件,但錯誤消息似乎很清楚。在訪問結果之前必須有一個Read()函數進行調用。嘗試將您的代碼更改爲如下所示:

using (var reader = new StreamReader(file.InputStream)) 
using (var csvReader = new CsvReader(reader)) 
{ 
    // Use While(csvReader.Read()); if you want to read all the rows in the records) 
    csvReader.Read(); 
    return csvReader.GetRecords<SurveyEmailListModels>().ToArray(); 
} 
+0

Doh!那就是訣竅 - 謝謝你幫助我,而我的大腦在今天早上加速。 – user547794

+0

沒問題。樂意效勞。 –

+0

但是代碼中沒有Read()調用 – cyberspy

相關問題