2011-05-06 6 views
4
<% using (Html.BeginForm("SearchByZip", "Dealer", new { zip = ""}, FormMethod.Get)) 
    { %> 
<div> 
<input type="text" class="padLeft" name="Zip" id="Zip" style="width: 200px" /> 
<input type="submit" class="btnFind" value="Find" /> 
</div> 
<% } %> 

Cela me donne l'URL "Dealer/Zip SearchByZip = 12 345?" Je voudrais finir avec ceci: "Concessionnaire/Zip/12345" (si je saisissez manuellement l'URL « Dealer/Zip/12345 » il renvoie les bons résultats, mais quand je clique dans la soumets vient avec « Dealer/SearchByZip? Zip = 12345 » Qu'est-ce que je manque?ASP.NET MVC routage, Html.BeginForm

routes.MapRoute(
      "DealerSearchByZip", 
      "Search/Zip/{zip}", 
      new { Controller = "Dealer", action = "SearchByZip", zip = "" } 
     ); 

Répondre

3

Cela se produit parce que "Zip" est un champ de saisie dans votre formulaire, et non pas des données de routage.Ainsi, lorsque la page est rendue, elle crée une URL en utilisant la route par défaut (route "DealerSearchByZip" n'était pas matc hed car Zip n'a pas été donné comme données de route).

Vous pouvez accomplir ceci via javascript, en mettant à jour l'attribut "action" sur le formulaire lorsque le champ "zip" est mis à jour. Exemple en utilisant jQuery:

$('input[name=Zip]').update(function(){ 
    $('form').attr('action', 'Dealer/Zip/' + $(this).val()); 
}); 

Ou, puisque Zip est la seule valeur que vous êtes inquiet,

$('form').submit(function(){ 
    window.location = 'Dealer/Zip/' + $('input[name=Zip]').val(); 
});