Frage

Ich verwende ASP.NET MVC Preview 4 und möchte wissen, wie ich die Routing-Engine für Formularübermittlungen verwende.

Ich habe zum Beispiel eine Route wie diese:

routes.MapRoute(
            "TestController-TestAction",
            "TestController.mvc/TestAction/{paramName}",
            new { controller = "TestController", action = "TestAction", id = "TestTopic" }
            );

Und eine Formulardeklaration, die so aussieht:

<% using (Html.Form("TestController", "TestAction", FormMethod.Get))
   { %>
     <input type="text" name="paramName" />
     <input type="submit" />
<% } %>

was ergibt:

<form method="get" action="/TestController.mvc/TestAction">
  <input type="text" name="paramName" />
  <input type="submit" />
</form>

Die resultierende URL einer Formularübermittlung lautet:

localhost/TestController.mvc/TestAction?paramName=value

Gibt es eine Möglichkeit, diese Formularübermittlung an die gewünschte URL weiterzuleiten:

localhost/TestController.mvc/TestAction/value

Die einzigen Lösungen, die mir einfallen, bestehen darin, eine separate Aktion zu erstellen, die nur die Anforderungsparameter überprüft, oder Javascript zu verwenden.

War es hilfreich?

Lösung

Lösung:

public ActionResult TestAction(string paramName)
{
    if (!String.IsNullOrEmpty(Request["paramName"]))
    {
        return RedirectToAction("TestAction", new { paramName = Request["paramName"]});
    }
    /* ... */
}

Andere Tipps

Entfernen Sie in Ihrer Route den Teil {paramName} der URL.Es sollte sein:

TestController.mvc/TestAction

Da dies die URL ist, an die die Anfrage weitergeleitet werden soll.Ihr Formular wird dann unter dieser URL gepostet.Gepostete Formularwerte werden automatisch den Parametern einer Aktionsmethode zugeordnet. Machen Sie sich also keine Sorgen, dass diese Daten nicht an Ihre Aktionsmethode übergeben werden.

Nach meinem Verständnis funktioniert HTML so.Wenn Sie a <form url="foo" method="get"> und poste das Formular, dann wird das Formular foo posten?

param1=value1&...&paramn=valuen

Es hat nichts mit MVC zu tun.

Welchen Teil von REST verletzt diese URL außerdem?Es ist kein hübsch URL, aber gemäß der strengen Definition von REST kann es RESTful sein.REST gibt nicht an, dass Abfrageparameter in einem URL-Segment enthalten sein müssen.Und in diesem Fall handelt es sich um Abfrageparameter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top