2010-05-29 18 views
0

i ont défini une voie comme ci-dessous:ASP.NET MVC URL problème de routage

context.MapRoute("SearchEngineWebSearch", "search/web/{query}/{index}/{size}", 
          new 
          { 
           controller = "search", 
           action = "web", 
           query = "", 
           index = 0, 
           size = 5 
          }); 

et méthode d'action pour gérer match de demande avec ce qui suit:

public System.Web.Mvc.ActionResult Web(string query = "", int index = 0, int size = 5) 
    { 
     if (string.IsNullOrEmpty(query)) 
      return RedirectToRoute("SearchEngineBasicSearch"); 
     var search = new Search(); 
     var results = search.PerformSearch(query, index, size); 
     ViewData["Query"] = query; 
     if (results != null && results.Count() > 0) 
     { 
      ViewData["Results"]= results; 
      return View("Web"); 
     } 
     else return View("Not-Found"); 
    } 

et forment au paramètre envoyé à la méthode d'action :

<% using (Html.BeginForm("Web", "Search", FormMethod.Post)) 
     { %> 
    <input name="query" type="text" value="<%: ViewData["Query"]%>" class="search-field" /> 
    <input type="submit" value="Search" class="search-button" /> 
    <input type="hidden" name="index" value="2" /> 
    <input type="hidden" name="size" value="2" /> 
    <%} %> 

maintenant, après cliquez sur soumettre et envoyer la valeur à la méthode d'action toutes les valeurs de route mises à jour, mais les valeurs url est toujours égal à égal à la première fois d'envoyer le paramètre. par exemple si j'ai envoyé pour la première demande comme http://localhost/search/web/google et pour la prochaine fois http://localhost/search/web/yahoo, le paramètre de requête qui est passé à la méthode d'action est yahoo mais l'URL après la publication est http://localhost/search/web/google encore!

quelqu'un peut-il m'aider plz? ;)

Répondre

1

Essayez quelque chose comme

return RedirectToAction("Web", 
    new { query = query, index = index, size = size}); 

au lieu de return View("Web");.

Notez également que vous devez effectuer un GET au lieu d'un POST. Et les paramètres d'index et de taille peuvent être omis s'ils ont été soumis avec les valeurs par défaut.

+0

désolé, car cela cause une redirection illimitée! et aussi si je change form-method de post à get, alors il génère l'url quels paramètres passés en querystring et je ne le ferai pas;) – Sadegh