Frage

Verwendung ASP.NET MVC-es gibt Situationen (wie z.B. Formular), für die eine RedirectToAction.

Eine solche situation ist, wenn Sie auftreten, Validierungs-Fehler nach einer Formular Vorlage und müssen die Umleitung zurück auf die form, sondern möchte, dass die URL zu reflektieren, die URL von der form, nicht der Seite Aktion die Sie legt.

Als ich benötigen, die form zu enthalten, die ursprünglich POSTed-Daten, die für Benutzerfreundlichkeit, als auch die Validierung, wie kann ich übergeben Sie die Daten durch die RedirectToAction()?Wenn ich das viewData-parameter, meine POST Parameter wird geändert werden, um GET Parameter.

War es hilfreich?

Lösung

Die Lösung: verwenden Sie die TempData-Eigenschaft, um speichern Sie die gewünschte Anfrage-Komponenten.

Zum Beispiel:

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

Dann in Ihrer "Form" Aktion, die Sie gehen können:

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

Andere Tipps

Beachten Sie, dass TempData speichert die Kollektion form in der Sitzung.Wenn Sie nicht möchten, dass Verhalten, können Sie bei der Umsetzung der neuen ITempDataProvider Schnittstelle, und verwenden einen anderen Mechanismus für die Speicherung von temporären Daten.Ich würde das nicht tun, es sei denn, Sie wissen, für eine Tatsache (über die Messung und Profilierung), die die Verwendung von Session-Staat ist, dich zu verletzen.

Werfen Sie einen Blick auf MVCContrib, Sie können dies tun:

using MvcContrib.Filters;

[ModelStateToTempData]
public class MyController : Controller {
    //
    ...
}

Es ist ein weiterer Weg, die verhindert, tempdata.Das Muster, das ich gerne umfasst das erstellen von 1-Aktion für die ursprüngliche Rendern und neu Rendern, die der unwirksamen in form.Es geht so etwas wie dieses:

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

Das ist das Muster mehr oder weniger.Ein wenig pseudoy.Mit diesem können Sie erstellen 1 zeigen Sie behandeln rendering form, re-die Darstellung der Werte (da die form gefüllt wird, die mit früheren Werten), und zeigt Fehler Nachrichten.

Bei der Veröffentlichung dieser Aktion, wenn Sie die gültigen übergibt er die Kontrolle über zu einer anderen Aktion.

Ich bin versucht zu machen, dieses Muster einfach in der .net-Validierungs-framework wie wir bauen-support für MVC.

Wenn Sie möchten, dass die übertragung von Daten von der Weiterleitung Aktion, die Methode, die Sie verwenden könnten, ist:

return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top