Usare il motore di routing per l'invio di moduli in ASP.NET MVC Preview 4
-
08-06-2019 - |
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.
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&...¶mn=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.