Hvordan RedirectToAction i ASP.NET MVC uten å miste forespørsel data

stemmer
115

Ved hjelp av ASP.NET MVC er det situasjoner (for eksempel innsending av skjemaet) som kan kreve en RedirectToAction.

En slik situasjon er når du støter på valideringsfeil etter et skjema for innsending og trenger å omdirigere tilbake til skjemaet, men ønsker at nettadressen for å gjenspeile nettadressen til formen, ikke handlingen siden den underkaster seg.

Som jeg kreve skjemaet skal inneholde de opprinnelig POSTed data, for brukervennlighet, samt valideringsformål, hvordan kan jeg passere dataene gjennom RedirectToAction()? Hvis jeg bruker tele parameter, mine POSTvil parametrene endres til GETparametere.

Publisert på 05/08/2008 klokken 05:33
kilden bruker
På andre språk...                            


5 svar

stemmer
76

Løsningen er å bruke TempData eiendommen for å lagre ønsket anmodning komponenter.

For eksempel:

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

Så i din "Form" handlingen kan du gå:

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);
}
Svarte 05/08/2008 kl. 05:43
kilden bruker

stemmer
36

Husk at TempData lagrer skjemaet samlingen i økten. Hvis du ikke liker at atferd, kan du implementere det nye ITempDataProvider grensesnitt og bruke en annen mekanisme for lagring av midlertidige data. Jeg ville ikke gjøre det med mindre du vet for et faktum (via måling og profilering) at bruk av Session tilstand er sårer deg.

Svarte 07/08/2008 kl. 05:12
kilden bruker

stemmer
13

Ta en titt på MVCContrib , kan du gjøre dette:

using MvcContrib.Filters;

[ModelStateToTempData]
public class MyController : Controller {
    //
    ...
}
Svarte 05/04/2009 kl. 09:36
kilden bruker

stemmer
8

Det er en annen måte som unngår tempdata. Mønsteret I like innebærer å skape en handling for både den opprinnelige gjengi og re-gjengi til den ugyldige form. Det går noe sånt som dette:

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();

Det er mønsteret mer eller mindre. Litt pseudoy. Med denne kan du opprette en visning for å håndtere rende skjemaet, re-visning av verdier (siden skjemaet vil bli fylt med tidligere verdier), og viser feilmeldinger.

Når annonsen til denne handlingen, hvis det gjelder den overfører kontrollen over til en annen handling.

Jeg prøver å gjøre dette mønsteret lett i .net validering rammeverk som vi bygger ut støtte for MVC.

Svarte 25/08/2008 kl. 22:06
kilden bruker

stemmer
2

Hvis du ønsker å sende data til omdirigert handling, hvilken metode du kan bruke er:

return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);
Svarte 30/11/2013 kl. 08:39
kilden bruker

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