2010-07-21 4 views
1

J'ai une forme très simple:ASP.NET MVC2 et les URL propres pour les demandes GET

<% Html.BeginForm("Listing", "Home", Nothing, FormMethod.Get) %> 
<%= Html.TextBox("id")%> 
<%= Html.TextBox("id2")%> 
<input type="submit" value="Submit" /> 
<% Html.EndForm()%> 

Cela va générer un formulaire avec deux champs de saisie. Si je rentre « test1 » et « test2 » sous forme de texte et soumettre le formulaire, le résultat final sera:

http:// localhost/Home/Listing?id=test1&id2=test2

Est-il possible de configurer le cadre MVC2 afin que le résultat final peut ressembler à ceci:

http://localhost/Home/Listing/test1/test2

Bien sûr, les alternatives écrivent soit un petit Javascript pour intercepter le formulaire soumettre, la construction de l'URL et de rediriger l'utilisateur sur le côté client, ou de faire un POST à ​​la place, construire l'URL puis rediriger l'utilisateur du côté serveur.

Répondre

0

d'abord, si vous utilisez des formulaires MVC, que d'utiliser

<%= Html.DisplayFor(m => m.Id2) %> 

au lieu de les dessiner manuellement.

Et il n'y a aucune possibilité pour un formulaire HTML de placer directement les valeurs dans l'URL. ils l'ont soit mis dans les variables POST (Header) ou GET (chaînes de requête). par conséquent, si vous voulez le comportement, vous devez faire le Javascript par vous-même.

et, btw, cela ne fonctionne que si votre route accepte la valeur.

context.MapRoute("{controller}/{action}/{id}/{id2}") 
3

Personnellement, je suis le PRG pattern ici.

Les utilisateurs remplissages dans votre formulaire qui est ensuite POST ed au serveur, vous effectuez toutes les opérations sur les données dont vous avez besoin, puis redirigez l'utilisateur via un GET à l'endroit approprié (redirigez à l'action, route, etc.).

Ceci a quelques avantages pour vous. Le premier et le plus évident est que l'utilisateur peut maintenant actualiser sa page de destination, etc., sans l'horrible message «Actualiser cette page affichera le bla bla retour au serveur».

Le deuxième avantage pour vous est que vous pouvez maintenant rediriger votre utilisateur vers l'URL que vous préférez. Dans votre cas, vous allez créer l'URL que vous allez rediriger aussi et ensuite les envoyer sur leur chemin. , c'est-à-dire http://localhost/Home/Listing/test1/test2

Questions connexes