2010-01-10 29 views
5

Benim kurulumu: sayfa detayları Comments/CreatePageComment RenderAction formlarla kullanılmalı mı?

  • /Comments/CreatePageComment getiri RedirectToAction a comment formu
  • Yorum formu mesajları işlemek için <% Html.RenderAction("CreatePageComment", "Comments"); %> sahiptir görüntülemek /Pages/Details/2
  • :

    • için bir görünüm var rota gibi Bir yorum başarıyla oluşturuldu
    • Bu güzel çalışıyor

    Soruma: /Pages/Detail/1 dönmek ve yorum şeklinde hata göstermelidir nasıl bir doğrulama hatası varsa

    ?

    • RedirectToAction kullanırsam, doğrulama zor görünüyor; Doğrulama hataları yerine Post-Redirect-Get desenini kullanmam gerekir mi?
    • View()'u geri döndürürsem CreateComment.aspx görünümünü (doğrulama ile değil, yalnızca beyaz bir sayfadaki bir formla) RenderAction adı verilen /Pages/Details/2 yolunu göstermeye döndürür.

    Eğer PRG deseni kullanılmalıysa, o zaman PRG'yi kullanırken doğrulama yapmayı öğrenmem gerektiğini düşünüyorum. — ve bana değilse bu View() — döndürerek daha iyi işlenmiş gibi görünüyor daha sonra RenderAction kullanırken, form hataları gösteren kullanıcının ilk görünümüne nasıl döndürüleceğini bilmiyorum.

    Bu, kafanıza dokunduğunuz ve karnınızı aynı anda ovaladığınız oyun gibi hissediyor. Bende de iyi değildim. MVC'de yeniyim, bu muhtemelen sorun. açıklamalarım kontrolörü olarak

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

    benim POST yöntemini var: Ben (Adımlar/Ayrıntıları /) Bence

    :

  • +0

    BTW: Bunu yalnızca bir Kısmi ve bir POST yoluna/Sayfa/Oluşturma Bölümüne sahip olmakla yapabilirdim, ancak bu karışık görünmüyor mu? Yorumlar denetleyicimin Sayfa denetleyicisini değil yorumları ele almasını istiyorum. Garip bir şekilde, sadece Oxite blog motor kodunu inceledim ve Post kontrolörleri, Yorumlar ekleyerek; Yorumlar Denetçisinin bir Oluştur eylemi bile yok! –

    cevap

    5

    Cevabın örneğin TempData kullanmak olduğuna inanıyoruz

    // 
        // 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 }); 
        } 
    
    : comments denetleyicisi da
    // 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 }); 
         } 
        } 
    

    benim GET yöntemidir

    Bu benim için harika çalışıyor, ama bu iyi bir uygulama olup olmadığı hakkında geri bildirim takdir ediyorum, vb

    Ayrıca, MVCContrib bunu görünen bir ModelStateToTempData dekorasyonu vardır, ama daha temiz bir şekilde fark . Bunu bir daha deneyeceğim.

    +0

    Sahip olduğunuzla benzer bir problemim var. Önerdiğiniz çözüm işe yarıyor gibi görünüyor, ancak bunu yapmanın daha temiz bir yolu yoksa merak ediyorum. Benim için çözümün gerçek bir çözümden daha çok bir hack gibi görünüyor. Bunun hakkında başka bir fikri olup olmadığını bilmiyorum? – Melursus

    +0

    Evet, aceleci hissettiriyor, ama bu işleri bulabildiğim tek şey bu. Senin gibi, daha temiz bir çözüm beklerim. –

    +0

    Araştırmamda, MvcContrib kütüphanesinin, bu tür bir problemi çözebilecek bir Alt-Denetim görevlisi aradığını buldum. Daha fazla bakmıyorum ama ilginç görünüyor. – Melursus

    İlgili konular