Utilizați motorul de rutare pentru depunerea formularului în ASP.NET MVC Preview 4

Folosesc ASP.NET MVC Preview 4 și aș dori să știu cum să folosesc motorul de rutare pentru depunerea formularului.

De exemplu, am un traseu de genul:

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

Și o declarație de formă care arată astfel:

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

care face ca:

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

Adresa URL care rezultă dintr-o trimitere a formularului este:

localhost/TestController.mvc/TestAction?paramName=value

Există vreo modalitate de a avea această rută de trimitere a formularului la adresa URL dorită:

localhost/TestController.mvc/TestAction/value

Singurele soluții la care mă pot gândi sunt crearea unei acțiuni separate care doar verifică parametrii solicitării sau pentru a utiliza Javascript.

0
fr hi bn

3 răspunsuri

Soluţie:

public ActionResult TestAction(string paramName)
{
    if (!String.IsNullOrEmpty(Request["paramName"]))
    {
        return RedirectToAction("TestAction", new { paramName = Request["paramName"]});
    }
    /* ... */
}
0
adăugat
Acest lucru face 2 cereri către server în loc de unul, nu?
adăugat autor Maslow, sursa
@Maslow yup! o redirecționare 302 va fi întotdeauna acolo
adăugat autor shashwat, sursa

În ruta dvs., scapa de partea {paramName} a adresei URL. Ar trebui să fie:

TestController.mvc/TestAction

Deoarece aceasta este adresa URL la care doriți să căutați cererea. Formularul dvs. va fi apoi trimis la acea adresă URL. Valorile formularului afișat sunt mapate automat la parametrii unei metode de acțiune, așa că nu vă faceți griji că nu ați transmis datele respective metodei dvs. de acțiune.

0
adăugat

My understanding is that this is how HTML works. If you do a <form url="foo" method="get"> and post the form, then the form will post foo?

param1=value1&...¶mn=valuen

Nu are nimic de-a face cu MVC.

În plus, ce parte din REST încalcă această adresă URL? Nu este o adresă destul de , dar prin definirea strictă a REST, poate fi RESTful. REST nu specifică faptul că parametrii interogării trebuie să fie într-un segment de adresă URL. Și în acest caz, aceștia sunt parametrii de interogare.

0
adăugat
Da, ai dreptate - mulțumesc. Reflectând asupra acestui lucru, nu sunt chiar sigur ce mă gândeam - poate doar pentru a obține aplicația MVC să traverseze o nouă adresă frumoasă după trimiterea formularului. Mai târziu, atributele GET/POST ajută la lucruri.
adăugat autor Matt Mitchell, sursa