Nasıl istek verileri kaybetmeden ASP.NET MVC RedirectToAction için

oy
115

ASP.NET MVC kullanarak bir gerektirebilir (örneğin form gönderme gibi) durumlar vardır RedirectToAction.

Bir form gönderildikten sonra doğrulama hatalarla ve geri forma yönlendirmesini gerekir, ancak formun değil, o boyun eğer eylem sayfası URL'sini yansıtmak için URL'yi istediğinizde böyle bir durumdur.

Başlangıçta içeren formu gerektiren gibi POSTed kullanıcıya kolaylık sağlamak için verileri, aynı zamanda, doğrulama, nasıl üzerinden veri geçebilir RedirectToAction()? Ben VIEWDATA parametresini kullanırsanız, benim POSTparametreleri değiştirilecektir GETparametreler.

Oluştur 05/08/2008 saat 06:33
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
76

Çözelti, istenen ayrıntılı bileşenleri saklamak için TempData özelliği kullanmaktır.

Örneğin:

public ActionResult Send()
{
    TempData["form"] = Request.Form;
    return this.RedirectToAction(a => a.Form());
}

Sonra "Form" eylem gidebilirsin:

public ActionResult Form()
{
    /* Declare viewData etc. */

    if (TempData["form"] != null)
    {
        /* Cast TempData["form"] to 
        System.Collections.Specialized.NameValueCollection 
        and use it */
    }

    return View("Form", viewData);
}
Cevap 05/08/2008 saat 06:43
kaynak kullanıcı

oy
36

TempData oturumda formu koleksiyonunu saklayan unutmayın. o davranışı beğenmezseniz, yeni ITempDataProvider arabirimini uygulayan ve geçici verilerini depolamak için başka bir mekanizma kullanabilirsiniz. Sana (ölçüm ve profil üzerinden) bir gerçeği biliyorum sürece oturum durumu kullanılması sizi zarar verdiği böyle bir şey yapmaz.

Cevap 07/08/2008 saat 06:12
kaynak kullanıcı

oy
13

Bir göz atın MVCContrib , bunu yapabilirsiniz:

using MvcContrib.Filters;

[ModelStateToTempData]
public class MyController : Controller {
    //
    ...
}
Cevap 05/04/2009 saat 10:36
kaynak kullanıcı

oy
8

TempData önler başka bir yolu yoktur. Sevdiğim desen orijinal ikisi için 1 eylemi oluşturma içerir hale ve geçersiz formunun yeniden işlemek. Bu böyle şeyler:

var form = new FooForm();

if (request.UrlReferrer == request.Url)
{
     // Fill form with previous request's data
}

if (Request.IsPost())
{
     if (!form.IsValid)
     {
         ViewData["ValidationErrors"] = ...
     } else {
         // update model
         model.something = foo.something;
         // handoff to post update action
         return RedirectToAction("ModelUpdated", ... etc);
     }
}

// By default render 1 view until form is a valid post
ViewData["Form"] = form;
return View();

Bu model daha çok veya az. Biraz pseudoy. Size bu konuda formu yeniden görüntülendiği değerleri (form önceki değerlerle doldurulacaktır beri), ve gösteren hata mesajları render işlemek için 1 görünüm oluşturabilirsiniz.

yayınlama şu eyleme, onun geçerli eğer başka eylem kontrolü ele aktarır zaman.

Ben bu model kolay yapmaya çalışıyorum .net doğrulama çerçevesi biz MVC için destek geliştirmeye devam.

Cevap 25/08/2008 saat 23:06
kaynak kullanıcı

oy
2

Eğer yönlendirildi eylem veri iletmek istiyorsanız, şunu kullanabilirsiniz yöntemdir:

return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);
Cevap 30/11/2013 saat 09:39
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more