2013-01-10 10 views
5

मैं [ImportModelStateFromTempData] और [ExportModelStateToTempData] एक्शन फ़िल्टर का उपयोग करके पीआरजी पैटर्न को लागू करने की कोशिश कर रहा हूं। यह पैटर्न फ्लैट मॉडल के लिए बहुत अच्छा काम करता है लेकिन जब मैं बाल संग्रह करता हूं तो मैं इसे काम नहीं कर सकता। मेरे मॉडल इस तरह दिखता है:बच्चों के साथ एमवीसी पीआरजी पैटर्न

public class QuestionModel 
{ 
    public string QuestionText { get; set; } 

    public ICollection<ChoiceModel> Choices { get; set; } 
} 

public class ChoiceModel 
{ 
    public string ChoiceText { get; set; } 
} 

मेरे नियंत्रक इस प्रकार है:

[HttpGet, ImportModelStateFromTempData] 
public ActionResult Create() 
{ 
    return View(); 
} 

[HttpPost, ExportModelStateToTempData] 
public ActionResult Create(QuestionModel model) 
{ 
    if(ModelState.IsValid) 
    { 
     // not getting here 
    } 

    return RedirectToAction("Create"); 
} 

मेरा विचार उपयोगकर्ता विकल्प के लिए नए आइटम जोड़ने के लिए अनुमति देता है, और मैं एक मान्यता है कि विकल्प अद्वितीय होना चाहिए है। जब मेरा मॉडलस्टेट वैध नहीं है, तो यह मॉडलस्टेट को टेम्पपडेटा में पैकेज करेगा और HttpGet कार्रवाई पर रीडायरेक्ट करेगा।

इस बिंदु पर मेरे सभी बाल मॉडल मान मॉडलस्टेट में हैं, लेकिन यह मॉडल को देखने के दौरान उन्हें पुनर्निर्माण नहीं करता है, इसलिए मेरा विचार दिखाता है कि 0 बच्चे जोड़े गए थे।

क्या मॉडल मॉडल के साथ मॉडलस्टेट को किसी भी तरह मर्ज करने का कोई तरीका है या क्या मैं इस पैटर्न का उपयोग बाल वस्तुओं के साथ नहीं कर सकता?

उत्तर

1

मुझे शक है [ImportModelStateFromTempData] उपयोग करने के लिए ModelState से मॉडल को फिर से संगठित करेंगे की जरूरत है, मैं इसे सिर्फ उपयोगकर्ता का प्रयास मूल्यों और सत्यापन हो रही इमेजिंग त्रुटियों, इसलिए मॉडल संग्रह इस बिंदु पर शुरू नहीं हुआ है (जीईटी) और आप पोस्ट से संग्रह पास नहीं कर रहे हैं, यह केवल मॉडल प्रारंभिक स्थिति प्रस्तुत करेगा, यह है यह फ्लैट मॉडल के साथ अच्छी तरह से क्यों काम करता है लेकिन इस मामले में संग्रह के साथ नहीं।

तो आपको उस संग्रह या छेद मॉडल को पोस्ट से जीईटी एक्शन तक पास करने का एक तरीका मिलना चाहिए, और विकल्प टेम्पपडाटा है।

//POST - if validation fails 
TempData["model"] = model; 

//GET - must check if TempData["model"] is null first 
QuestionModel model = (QuestionModel)TempData["model"]; 
+0

यदि यह ध्वनि बहुत गन्दा है तो आप 'पीआरजी लूज' पैटर्न में भी बदल सकते हैं, यह बहुत आसान हो जाता है http://stackoverflow.com/questions/8178821/is-there-a-name-for-the-prg-pattern- कि-does not को-रीडायरेक्ट-ऑन-विफल रहा है-मान्यता? RQ = 1 – JOBG

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