Verwenden Sie die Routing-Engine für Formularübermittlungen in ASP.NET MVC Preview 4
-
08-06-2019 - |
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.
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&...¶mn=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.