2008-08-12 22 views
12

Ich verwende ASP.NET MVC Preview 4 und würde gerne wissen, wie Sie die Routing-Engine für Formularübergaben verwenden.Verwenden Sie die Routing-Engine für Formularübergaben in ASP.NET MVC Preview 4

Zum Beispiel habe ich eine Route wie folgt aus:

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

Und eine Form Erklärung, die wie folgt aussieht:

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

, die macht:

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

Das resultierende URL eines Formulars ist:

localhost/TestController.mvc/TestAction?paramName=value 

Gibt es eine Möglichkeit, diese Form Vorlage Route zur gewünschten URL haben:

localhost/TestController.mvc/TestAction/value 

Die einzigen Lösungen, die ich denken kann, sind eine separate Aktion zu erstellen, die die Anfrageparameter nur überprüft, oder benutze Javascript.

Antwort

9

Lösung:

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

Das macht 2 Anfragen an den Server statt einer, richtig? – Maslow

+0

@Maslow yup! Ein 302 Redirect wird immer da sein – shashwat

3

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

TestController.mvc/TestAction

Da, dass die URL ist, dass Sie die Anfrage auf dem Weg zu wollen. Ihr Formular wird dann an diese URL senden. Posted-Form-Werte werden automatisch den Parametern einer Aktionsmethode zugeordnet. Sie müssen sich also nicht darum kümmern, dass diese Daten nicht an Ihre Aktionsmethode übergeben werden.

3

Mein Verständnis ist, dass so HTML funktioniert. Wenn Sie eine <form url="foo" method="get"> machen und das Formular posten, wird das Formular foo?

param1=value1&...&paramn=valuen 

Es hat nichts mit MVC zu tun.

Außerdem, welchen Teil von REST verletzt diese URL? Es ist keine hübsche URL, aber durch strenge Definition von REST kann es RESTful sein. REST gibt nicht an, dass Abfrageparameter in einem URL-Segment sein müssen. Und in diesem Fall sind dies Abfrageparameter.

+1

Ja, du hast recht - danke. Wenn ich darüber nachdenke, bin ich mir nicht einmal sicher, was ich denke - vielleicht nur, um die MVC-App nach der Einreichung des Formulars auf eine schöne neue URL umleiten zu lassen. Die späteren GET/POST-Attribute helfen Dinge. –