2015-03-16 20 views
6

İki bakan bir ASP.NET MVC online alışveriş benzeri uygulama vardır:Geçiş mesajı ASP.NET MVC görüntülemek için

  • Bir öğenin sayfa (fotoğraf, açıklama, vs.)
  • kullanıcı başarıyla formu gönderdikten sonra kullanıcı yorum

bırakabilir bir form, o öğenin sayfasına geri yönlendirilmesi gereken ve bir defalık mesajı üst görüntülenecek olmalıdır: "İncelemeniz gönderildi başarıyla".

kontrolör kodu (basitleştirilmiş) aşağıdaki gibidir: kullanıcı öğenin sayfayı yenilemesi veya

  • mesajı tekrar gösterme gerekir:

    [HttpGet] 
    public ActionResult ViewItem([Bind] long id) 
    { 
        var item = _context.Items.First(x => x.Id == id); 
        return View(item); 
    } 
    
    [HttpGet] 
    public ActionResult AddReview() 
    { 
        return View(); 
    } 
    
    [HttpPost] 
    public ActionResult AddReview([Bind] long id, [Bind] string text) 
    { 
        _context.Reviews.Add(new Review { Id = id, Text = text }); 
        _context.SaveChanges(); 
    
        return RedirectToAction("ViewItem"); 
    } 
    

    karşılamak için bazı şartlar vardır.

  • İleti, URL'yi kirletmemelidir.
  • Denetleyici yöntemleri bir birine birleştirilmemiş olabilir.

Mesajı kullanıcı oturumuna kaydetmeyi ve görüntülendikten sonra atmayı düşünüyordum, ancak daha iyi bir çözüm olabilir mi?

+1

TempData bunun için çalışacak. Bu sorudaki örneğe bakın: [http://stackoverflow.com/questions/1500402/when-to-use-tempdata-vs-session-in-asp-net-mvc](http://stackoverflow.com/questions/1500402/ne zaman-kullanım-tempdata-vs-oturum açma-as-net-mvc) – markpsmith

+2

ViewBag veya ViewData, oturumdan daha iyi olurdu. Http://www.arunprakash.co.in/2013/08/viewbag-viewdata-tempdata-and-view.html –

+0

TEMPDATA burada tavsiye edilir, bir flash messenger olarak hareket edecektir. –

cevap

11

tempdata kullanarak, iletiyi veya verileri (dize/nesneyi) bir sayfadan başka bir sayfaya geçirebilirsiniz ve yalnızca bir eylemden diğerine geçer. TempData hakkında

bazı önemli noktalar:

  1. TempData ControllerBase sınıfının bir özelliktir.
  2. TempData, mevcut isteğin sonraki isteğine (bir sayfadan diğerine yönlendirme) geçmek için kullanılır.
  3. Bu hayat çok kısa ve sadece hedef görünüm tamamen yüklenene kadar uzanır.
  4. Verileri almak ve hatalardan kaçınmak için boş değerleri kontrol etmek için yazım gerekir.
  5. Hata mesajları, doğrulama mesajları gibi yalnızca bir kez mesaj kaydetmek için kullanılır. TempData ile verileri bu makaleye bakın devam etmek için: Persisting Data with TempData

sizin denetleyicisi:

[HttpPost] 
    public ActionResult AddReview([Bind] long id, [Bind] string text) 
    { 
     _context.Reviews.Add(new Review { Id = id, Text = text }); 
     _context.SaveChanges(); 

     TempData["message"] = "someMessage"; 
     return RedirectToAction("ViewItem"); 
    } 

görünümünüzü sayfasında:

 @TempData["message"]; //TempData["message"].ToString(); 
+4

Noktayı kaçırıyorsun. Cevabınız, "Bu kodu kullan" diyerek, ne yaptığını açıklamadan belirtir (ve yorumlanan kodun anlamı nedir?). İyi bir cevap sadece OP'in şu anki probleminden kurtulmasına yardımcı olmaz, bunun neden böyle olduğunu açıklar, bu yüzden ziyaretçiler daha sonra bunun kendileri için doğru bir yaklaşım olup olmadığını değerlendirebilirler. – CodeCaster