2009-04-27 8 views
3

J'ai une URL:ASP.NET MVC: Formulaire d'entrée aux URL jolies

Expédition/Recherche/{searchType}/{} searchValue

et une action de contrôleur:

// ShipmentSearchType is an enum ... PartNumber, CustomerOrder, etc... 
ActionResult Search(ShipmentSearchType searchType, string searchValue) 

Alors cela signifie que je peux taper dans un joli urls comme:

Expédition/Recherche/PartNumber/Widget-01

Et ge t une liste de toutes les expéditions avec ce numéro de pièce.

Maintenant, je fais le travail occupé de l'application et je suis arrivé au point où je suis en train de faire un formulaire de recherche qui demande le numéro de pièce et il sera affiché à la recherche. Donc, fondamentalement, je veux:

Expédition/Recherche/PartNumber/{user-input-de-} zone de texte

Malheureusement, je ne peux pas avoir une forme obtenir à l'URL ci-dessus - il doit être généré côté serveur . Donc, à la place, je reviendrai au formulaire Envoi/Recherche/PartNumber avec {user-input} comme valeur de demande de publication.

Alors je me retrouve avec:

[AcceptVerbs(HttpVerbs.Post)] 
ActionResult Search(ShipmentSearchType searchType, string searchValue, bool? post) 
{ 
    return RedirectToAction("Search", new { searchType = searchType, searchValue = searchValue}); 
} 

2 choses:

1) Est-il possible que je peux obtenir autour d'avoir la méthode post de recherche sans utiliser javascript côté client?

2) Le bool? la valeur de poste est là juste pour qu'ils aient des signatures différentes. C'est évidemment moche. Y a-t-il une façon plus intelligente de faire cela?

Merci!

modifier:

« Malheureusement, je ne pense pas que je peux le faire à partir d'une forme (sans javascript au moins). » & "Existe-t-il un moyen de contourner le message sans utiliser javascript?"

C'était un peu ambigu. Ce que je veux dire c'est que je ne pense pas que je peux avoir un formulaire générer l'URL/Shipment/Search/PartNumber/{value-from-textbox} et l'avoir à une méthode de formulaire get. Je pense que ce serait simple à faire en javascript (remplacer l'action de soumission pour construire l'URL de manière dynamique) mais je ne l'ai pas fait. Je ne voulais pas dire que javascript est nécessaire pour faire un post.

+0

Je ne vois pas pourquoi vous ne pouvez pas faire cela sans javascript. Pourriez-vous expliquer pourquoi vous pensez que vous ne pouvez pas? –

Répondre

6

j'ai même situation, mais ça marche très bien sans javascript, je viens de recevoir FormCollections dans [post] Rechercher puis réoriente à l'action comme ceci:

[AcceptVerbs(HttpVerbs.Post)] 
ActionResult Search(FormCollection form) 
{ return RedirectToAction("Search", new { searchType = form["searchType"], searchValue = form["searchValue"]}); } 

Je pense qu'il est une bonne solution parce que je regardais vidéo sur Post-Redirect-Get modèle qui - bonnes pratiques dans les applications mvc asp.net.

+0

Vous avez une URL sur la vidéo? –

+0

Description du motif, vous pouvez trouver ici http://en.wikipedia.org/wiki/Post/Redirect/Get vidéo est http://videos.visitmix.com/MIX09/T44F il ne s'agit pas de motif, mais Phil Haack a dit à ce sujet ici. –

+0

Je suppose que je ne vois pas cela comme une solution.Tout ce que vous faites est d'obscurcir la signature de la méthode pour utiliser une collection de formulaires mais faire exactement la même chose que: ActionResult Search (ShipmentSearchType searchType, string searchValue) Ceci est juste un travail différent pour ne pas pouvoir avoir des signatures identiques pour la méthode Get and Post. Ma question (qui a fini par être déroutante!) Était s'il y avait un moyen d'avoir un Get et un Post avec la même signature sans les différencier artificiellement. Je peux le faire fonctionner (et c'est), je le trouve juste malodorant. – anonymous

Questions connexes