Domanda

Utilizzo ASP.NET MVC Preview 4 e vorrei sapere come utilizzare il motore di routing per l'invio di moduli.

Ad esempio, ho un percorso come questo:

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

E una dichiarazione del modulo simile a questa:

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

che rende a:

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

L'URL risultante dell'invio di un modulo è:

localhost/TestController.mvc/TestAction?paramName=value

Esiste un modo per far sì che questo invio del modulo venga indirizzato all'URL desiderato di:

localhost/TestController.mvc/TestAction/value

Le uniche soluzioni a cui riesco a pensare sono creare un'azione separata che controlli semplicemente i parametri della richiesta o utilizzare Javascript.

È stato utile?

Soluzione

Soluzione:

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

Altri suggerimenti

Nel tuo percorso, elimina la parte {paramName} dell'URL.Dovrebbe essere:

TestController.mvc/TestAction

Poiché questo è l'URL a cui desideri instradare la richiesta.Il tuo modulo verrà quindi pubblicato su quell'URL.I valori del modulo pubblicato vengono mappati automaticamente ai parametri di un metodo di azione, quindi non preoccuparti di non trasferire i dati al tuo metodo di azione.

La mia comprensione è che questo è il modo in cui funziona l'HTML.Se fai a <form url="foo" method="get"> e pubblica il modulo, quindi il modulo pubblicherà foo?

param1=value1&...&paramn=valuen

Non ha nulla a che fare con MVC.

Inoltre, quale parte di REST viola quell'URL?Non è un bello URL, ma per definizione rigorosa di REST, può essere RESTful.REST non specifica che i parametri di query devono trovarsi in un segmento URL.E in questo caso, questi sono parametri di query.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top