2012-06-18 12 views
9

मैं अपलोड की गई CSV फ़ाइल को पढ़ने के लिए CSVhelper प्लगइन का उपयोग करने का प्रयास कर रहा हूं। यहाँ मेरी modelBinder वर्ग है:फ़ाइल अपलोड पर 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; } 
    
    } 
    

उत्तर

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

दोह! यह चाल है - मेरी मस्तिष्क आज सुबह तेजी से उठने में मदद करने के लिए धन्यवाद। – user547794

+0

कोई समस्या नहीं है। मदद करने में खुशी। –

+0

लेकिन आपके कोड – cyberspy

संबंधित मुद्दे