2009-06-16 12 views
13

मेरे पास एक कर्मचारी के टाइमशीट का प्रतिनिधित्व करने वाली तालिका के साथ एक दृश्य है। शीर्ष पर दिन, प्रत्येक दिन/प्रोजेक्ट चौराहे के साथ नियमित रूप से घंटों और ओवरटाइम के लिए दो मान वाले पक्ष के साथ परियोजनाएं।नेस्टेड सूचियों के साथ एएसपी.नेट एमवीसी डिफॉल्टमोडेल बाइंडर

(सरलीकृत) वर्ग पेज मॉडल परिभाषाएं दी गई हैं: DefaultModelBinder उन पर लेने के लिए प्राप्त करने की कोशिश में इस प्रकार

public class TimesheetFormModel { 
    public List<Project> Projects; 
    // other things... 
} 
public class Project { 
    public string Name; 
    public List<WorkUnit> WorkUnits; 
} 
public class WorkUnit { 
    public DateTime Date; 
    public decimal RegularHours; 
    public decimal OvertimeHours; 
} 

पृष्ठ पर फार्म तत्वों नाम हैं।

model.Projects[0].Name // "New Project" 
model.Projects[0].WorkUnits[0].Date // "5/23/2009 12:00:00 AM" 
model.Projects[0].WorkUnits[0].RegularHours // 0 
model.Projects[0].WorkUnits[0].OvertimeHours // 0 

model.Projects[0].WorkUnits[1].Date // "5/24/2009 12:00:00 AM" 
model.Projects[0].WorkUnits[1].RegularHours // 0 
model.Projects[0].WorkUnits[1].OvertimeHours // 0 

model.Projects[0].WorkUnits[2].Date // "5/25/2009 12:00:00 AM" 
model.Projects[0].WorkUnits[2].RegularHours // 0 
model.Projects[0].WorkUnits[2].OvertimeHours // 0 

// etc. 

जब दृश्य तथापि प्रस्तुत किया जाता है, model पैरामीटर पूरी तरह से आबादी वाले नहीं किया जा रहा है। model.Projects में परियोजनाएं हैं, लेकिन Project का WorkUnits फ़ील्ड खाली है। क्या DefaultModelBinder नेस्टेड संग्रहों का समर्थन किया है जैसे मैं करने की कोशिश कर रहा हूं? यदि नहीं, तो मुझे क्या करना चाहिए?

उत्तर

13

मैं अंत में पता लगा क्यों DefaultModelBinderWorkUnit के गुणों पर उठा नहीं किया गया था: क्योंकि वे गुण नहीं थे, वे क्षेत्रों थे। DefaultModelBinder केवल संपत्तियों के साथ काम करता है। WorkUnit और Project के वर्ग परिभाषा बदल रहा है सब कुछ क्लिक किए गए क्षेत्रों का उपयोग करने के लिए:

public class Project { 
    public IList<WorkUnit> WorkUnits { get; set; } 
    public string Name { get; set; } 
} 

public class WorkUnit { 
    public DateTime Date { get; set; } 
    public decimal RegularHours { get; set; } 
    public decimal OvertimeHours { get; set; } 
} 

(नोट: मूल प्रश्न में स्रोत कोड Project.Name एक क्षेत्र के रूप में परिभाषित किया गया था, अपने वास्तविक कोड में यह एक संपत्ति थी। यही कारण है कि परियोजनाओं की सूची आबादी हो रही थी लेकिन वर्कयूनीट नहीं था।)

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

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