2010-12-14 22 views
2

Possible en double:
How can I accomplish this type of URL in ASP.Net MVC2?URL n'affiche pas exactement ce que je veux

Je veux créer des liens HTML comme:

/Auctions/Clothes 
/Auctions/Electronics 
/Auctions/Real Estate 

Voici comment je suis la construction des liens:

<li>@Html.ActionLink("Ropa", "Index", "Anuncios", new { category = "Ropa" }, new { })</li> 
<li>@Html.ActionLink("Libros", "Index", "Anuncios", new { category = "Libros" }, new { })</li> 

Les problèmes sont les liens sont utilisés comme ceci:

http://localhost:8589/Anuncios?category=Libros 

Je veux que mes URLS pour être agréable à regarder, en tant que telle que je voudrais l'être comme ci-dessus pour:

/Anuncios/Libros 

Des suggestions sur la façon de résoudre ce problème? Voici la méthode ActionResult, et pour clarifier, c'est exactement ce que je veux faire. Cela fonctionne, sauf que l'URL est horrible.

public ActionResult Index(string category) 
{    
    AuctionRepository auctionRepo = new AuctionRepository(); 
    var auctions = auctionRepo.FindAllAuctions().Where(a => a.Subcategory.Category.Name == category); 
    return View(auctions); 
} 
+0

comment votre itinéraire est-il configuré? –

+0

Non configuré du tout (dans le fichier Global.asax) si vous voulez dire cela. Suggestions? –

+2

Si vous n'avez configuré aucune route, comment voulez-vous que MVC sache à quoi ressemblent vos URL? –

Répondre

0

veuillez jeter un oeil à cette question pour mettre en œuvre votre exigence.

EDIT:

créer une nouvelle aide HTML que vous utiliserez pour rendre le menu comme celui-ci

public static class MyMenuHelper { 
    public static string MyMenu(this HtmlHelper helper) { 
     List<Category> categories = GetCategories(); 
     foreach (Category c in categories) { 
      helper.RouteLink(c.Name, "AuctionCategoryDetails", new { categoryName = c.Name }); 
     } 
    } 
} 

Enfin, dans votre page _Layout utiliser comme ceci

+0

Salut Lorenzo, merci beaucoup pour votre aide. La variable que vous appelez "html" n'est pas disponible. Peut-être une faute de frappe? Je vois aussi que la méthode retourne une chaîne, mais elle ne retourne jamais rien. Des idées? –

+0

Oui! c'était une faute de frappe. Cela devrait être "aide". J'ai modifié la réponse – Lorenzo

+0

S'il vous plaît faites attention que vous ne pouvez pas avoir des espaces dans l'URL. Donc, si c'est votre cas, supprimez simplement l'espace du nom de la catégorie que vous avez placé sur le troisième paramètre de RouteLink – Lorenzo

-1

Vous devez ajouter des routes afin que MVC sache comment vous préférez que les liens ressemblent. Ce n'est pas comme il peut lire vos pensées, ou faire du café.

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute(
     "Anuncios",     // Route name 
     "Anuncios/{category}",  // URL with parameters 
     new { category = "Index" } // Parameter defaults 
    ); 
} 
+0

Cela ne répond pas à la question. il explique comment créer un itinéraire ... – Lorenzo

+1

comment cela peut-il ne pas être une réponse ... son problème est qu'il n'a pas créé de routes, donc je lui montre comment ajouter des routes afin que la méthode ActionLink puisse rendre le chemin désiré urls. –

+0

Son problème est clairement (très clairement) énoncé dans la première ligne. Et il ne me semble pas qu'il cherche à créer une route générique. De plus la solution n'est pas celle que vous avez décrite car votre solution suppose de créer un nombre variable de routes (une pour chaque catégorie) et donc potentiellement conduire à de multiples modifications du code lorsqu'une nouvelle catégorie sera ajoutée – Lorenzo