2010-01-10 14 views
5

मेरे सेटअप: /Pages/Details/2 क्या रेंडरएक्शन फॉर्म के साथ इस्तेमाल किया जाना चाहिए?

  • पेज विवरण देखने <% Html.RenderAction("CreatePageComment", "Comments"); %> है Comments/CreatePageComment
  • /Comments/CreatePageComment रिटर्न RedirectToAction के लिए एक टिप्पणी प्रपत्र
  • टिप्पणी फ़ॉर्म पोस्ट प्रस्तुत करने के लिए:

    • के लिए एक दृश्य है मार्ग की तरह एक जब कोई टिप्पणी सफलतापूर्वक बनाई जाती है
    • यह सब अच्छी तरह से
    • काम करता है

    मेरा प्रश्न:

    अगर वहाँ एक प्रमाणीकरण त्रुटि है, मैं कैसे /Pages/Detail/1 में लौटने और टिप्पणी के रूप में त्रुटि दिखाना चाहिए?

    • यदि मैं RedirectToAction का उपयोग करता हूं, तो ऐसा लगता है कि सत्यापन मुश्किल है; क्या मुझे केवल लौटने की बजाय सत्यापन त्रुटियों के लिए पोस्ट-रीडायरेक्ट-गेट पैटर्न का उपयोग करना चाहिए?
    • यदि मैं View() लौटाता हूं तो यह मुझे CreateComment.aspx व्यू (सत्यापन के साथ, लेकिन एक सफेद पृष्ठ पर केवल एक फॉर्म) दिखाने के लिए वापस लाता है, /Pages/Details/2 मार्ग नहीं जिसे RenderAction कहा जाता है।

    यदि पीआरजी पैटर्न का उपयोग किया जाना चाहिए, तो मुझे लगता है कि मुझे सीखने की आवश्यकता है कि पीआरजी का उपयोग करते समय सत्यापन कैसे करें। यदि — और मेरे लिए यह View() — वापस लौटने से बेहतर तरीके से संभाला जाता है तो मुझे नहीं पता कि उपयोगकर्ता को प्रारंभिक दृश्य में वापस कैसे प्राप्त किया जाए, RenderAction का उपयोग करते समय फ़ॉर्म त्रुटियों को दिखाया जाए।

    यह ऐसा गेम लगता है जहां आप अपना सिर टैप करते हैं और एक ही समय में अपना पेट रगड़ते हैं। मैं उस पर भी अच्छा नहीं था। मैं एमवीसी में नया हूं, इसलिए यहां समस्या है।

  • +0

    बीटीडब्लू: मैं इसे आंशिक और एक पोस्ट मार्ग/पृष्ठ/बनाएँकॉममेंट करके कर सकता हूं, लेकिन क्या यह गन्दा नहीं लगता है? मैं पेज कंट्रोलर नहीं, मेरी टिप्पणियां नियंत्रक हैंडल टिप्पणियां चाहता हूं। विचित्र रूप से, मैंने बस ऑक्साइट ब्लॉग इंजन कोड की समीक्षा की, और उनके पोस्ट नियंत्रक टिप्पणियां जोड़ने में हैंडल करता है; उनकी टिप्पणियां नियंत्रक के पास कोई कार्यवाही भी नहीं है! –

    उत्तर

    5

    मेरा मानना ​​है कि इस सवाल का जवाब TempData उपयोग करने के लिए, उदाहरण के लिए है: (/ कदम/विवरण)

    मेरी नजर में मेरे पास है:

    <!-- List comments --> 
    <% Html.RenderAction("List", "Comments", new { id = Model.Step.Id }); %> 
    
    <!-- Create new comment --> 
    <% Html.RenderAction("Create", "Comments", new { id = Model.Step.Id }); %> 
    

    मेरी टिप्पणी नियंत्रक में मैं अपनी पोस्ट विधि है:

    // 
        // GET: /Comments/Create 
    
        public ActionResult Create(int id) 
        { 
    
         if (TempData.ContainsKey("ModelState")) 
         { 
          ModelStateDictionary externalModelState = (ModelStateDictionary)TempData["ModelState"]; 
          foreach (KeyValuePair<string, ModelState> valuePair in externalModelState) 
          { 
           ModelState.Add(valuePair.Key, valuePair.Value); 
          } 
         } 
         return View(new Comment { StepId = id }); 
        } 
    
    :
    // POST: /Comments/Create 
        [HttpPost] 
        public ActionResult Create([Bind(Exclude = "Id, Timestamp, ByUserId, ForUserId")]Comment commentToCreate) 
        { 
         if (ModelState.IsValid) 
         { 
          //Insert functionality here 
    
          return RedirectToAction("Details", "Steps", new { id = commentToCreate.StepId }); 
    
         } 
    
        //If validation error 
         else 
         { 
    
          //Store modelstate from tempdata 
          TempData.Add("ModelState", ModelState); 
    
          //Redirect to action (this is hardcoded for now) 
          return RedirectToAction("Details", "Steps", new { id = commentToCreate.StepId }); 
         } 
        } 
    
    टिप्पणियां नियंत्रक में

    इसके अलावा मेरे GET पद्धति है

    यह मेरे लिए अच्छा काम करता है, लेकिन मैं क्या यह एक अच्छा अभ्यास है पर प्रतिक्रिया की सराहना करते हैं, आदि

    इसके अलावा, मैंने देखा है MvcContrib एक ModelStateToTempData सजावट यह करने के लिए प्रतीत होता है कि है, लेकिन एक क्लीनर तरह से है कि । मैं इसे अगले कोशिश करने जा रहा हूँ।

    +0

    मुझे आपके पास जो भी था, उसकी एक ही समस्या है। आपके द्वारा प्रस्तावित समाधान काम करने लगता है, लेकिन अगर मैं इसे करने का क्लीनर तरीका नहीं हूं तो मैं उत्सुक हूं। मेरे लिए, आपका समाधान वास्तविक समाधान की तुलना में अधिक हैक लगता है। मुझे नहीं पता कि किसी और के पास इस पर कोई और राय है या नहीं? – Melursus

    +0

    हाँ, यह हैकिश महसूस करता है, लेकिन यह सब मुझे वह काम मिल सकता है। आप की तरह, मैं एक क्लीनर समाधान का स्वागत करेंगे। –

    +0

    मेरे शोध में, मुझे लगता है कि एमवीसीकंट्रिब लाइब्रेरी में कुछ कॉल सबकंट्रोलर है जो शायद उस तरह की समस्या को हल कर सकता है। मैं आगे नहीं देखता, लेकिन यह दिलचस्प लगता है। – Melursus

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