2010-09-05 7 views
5

जब मेरे नियंत्रक के लिए पोस्ट अनुरोध पर कार्य मैं समस्या हो रही है:वहाँ प्रकार का कोई ViewData मद है 'IEnumerable <SelectListItem>' कुंजी है कि 'करेरा'

[HttpGet] 
public ActionResult Crear() 
{ 
    CarreraRepository carreraRepository = new CarreraRepository(); 
    var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre); 
    var carrerasList = new SelectList(carreras, "ID", "Nombre"); 
    ViewData["Carreras"] = carrerasList; 

    Materia materia = new Materia(); 
    return View(materia);   
} 

[HttpPost] 
public ActionResult Crear(Materia materia, FormCollection values) 
{ 
    if (ModelState.IsValid) 
    { 
     repo.Add(materia); 
     repo.Save(); 

     return RedirectToAction("Index"); 
    } 
    return View(materia); 
} 

जब HttpGet कार्रवाई चलाता है, प्रस्तुत करने के लिए फार्म ठीक है। मूल्य DropDownList पर सही ढंग से सेट हैं और सब कुछ peachy है; जब मैं फॉर्म सबमिट करने का प्रयास करता हूं (HttpPost कार्रवाई चलाएं) मुझे त्रुटि मिलती है।

क्या कोई मेरी मदद कर सकता है?

क्या ऐसा इसलिए है क्योंकि HttpPost को ViewData घोषित नहीं किया गया है? सहायता के लिए धन्यवाद।

उत्तर

16

चूंकि आप उसी दृश्य पर पोस्ट कर रहे हैं, जब आप Creat पर पोस्ट करते हैं तो ViewData["Carreras"] नहीं बनाया गया है। आपको अपने पोस्ट में फिर से अपने कैरिएरा का डेटा लोड करना होगा।

[HttpPost] 
public ActionResult Crear(Materia materia, FormCollection values) 
{ 
    CarreraRepository carreraRepository = new CarreraRepository(); 
    var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre); 
    var carrerasList = new SelectList(carreras, "ID", "Nombre"); 
    ViewData["Carreras"] = carrerasList; 

    if (ModelState.IsValid) 
    { 
     repo.Add(materia); 
     repo.Save(); 

     return RedirectToAction("Index"); 
    } 
    return View(materia); 
} 
+1

इससे समस्या ठीक हो जाएगी ... चूंकि दोनों पदों और कोड को कोड की पहली 4 पंक्तियों की आवश्यकता है, इसलिए मैं उन्हें एक विधि में निकालने का सुझाव दूंगा ताकि यह सब एक ही स्थान पर हो। इस तरह यदि आप इसे बदलते हैं, तो आपको केवल एक ही स्थान पर ऐसा करना होगा। – thorkia

+0

@thorkia, yup मैं आपसे सहमत हूं .. –

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