2009-07-27 3 views
3

Dire que j'ai une route comme ceci:ASP.Net MVC: Formulaire avec méthode Obtenir la perte de paramètres sur Soumettre

"{controller}/{action}/{roomId}/{name}" 

Et une action de forme comme celui-ci (Et oui il semble que cela dans l'action dans le html à savoir le traitement post serveur):

Room/Index/6/SomeThing?pageNumber=1&amountToShow=5 

Et la forme est simple:

<form action = "Room/Index/6/SomeThing?pageNumber=1&amountToShow=5" method="get"> 
    <button type="submit">SomeButton</button> 
</form> 

maintenant, lorsque le bouton est cliqué, le s de demande omehow semble à moitié perdre le pageNumber = 1 & amountToShow = 5 partie. En fait, lorsque j'ai regardé dans la liste ActionExecutingContext.ActionParameters, les paramètres sont là (pageNumber et amountToShow) mais il n'y a pas de valeurs. J'ai même regardé dans la requête, et il n'y a pas de paramètres de requête malgré le fait que l'URL soit "Room/Index/6/SomeThing? PageNumber = 1 & amountToShow = 5".

Je pensais que peut-être cela avait à voir avec le bouton et la forme, et peut-être cela n'a pas été possible, mais j'ajusté la route vers:

"{controller}/{action}/{roomId}/{name}/{pageNumber}/{amountToShow}" 

Et il fonctionne, sauf l'URL est super formaté :

Room/Index/6/SomeThing/1/5 

Ce qui est à prévoir puisque c'est apparemment ce travail cette fois-ci. Des idées?

MISE À JOUR

Comme ci-dessous suggèrent Adrian Godong, j'ai essayé d'utiliser les entrées cachées et il fonctionne, mais cela soulève encore plus de questions. Pourquoi est-ce qu'avec la route plus verbeuse a été capable de gérer les paramètres de demande sans valeurs cachées, mais la route raccourcie ne l'est pas.

Répondre

3

Avez-vous essayé de déplacer les paramètres de chaîne de requête dans des champs de saisie masqués?

Ainsi, au lieu de votre bloc de forme, essayez ceci:

<form action = "Room/Index/6/SomeThing" method="get"> 
    <input type="hidden" name="pageNumber" value="1" /> 
    <input type="hidden" name="amountToShow" value = "5" /> 
    <button type="submit">SomeButton</button> 
</form> 
+0

Je peux essayer, mais je me demande toujours pourquoi l'action échoue comme ça. –

+0

Cela fonctionne mais ajoute à la confusion. Il doit y avoir quelque chose d'étrange avec les formulaires, les get et les routes. –

+1

apparemment c'est juste comment les formulaires html fonctionnent ... voir http://stackoverflow.com/questions/1116019/submitting-a-get-form-with-query-string-params-and-hidden-params-disappear qui parle à propos du même problème en dehors d'asp.net –

2

Je pense qu'il se munged parce que quand vous soumettez un formulaire via l'obtenir ajoute 'formvalue = valeur & otherfield = annothervalue ...? à la chaîne de requête. Cela peut provoquer votre '? Stuff = valeur' ​​pour être ignoré par IIS/ASP.

Questions connexes