2009-05-20 9 views
2

J'essaie de comprendre comment définir conditionnellement une routeValue facultative.ASP.net MVC RouteLink et les routesValues ​​optionnelles

Je

<%= Html.RouteLink("<<<","Products",new { page=(Model.Products.PageIndex) }) %> 

Si un visiteur clique sur une « catégorie » I seuls les produits de cette catégorie montrent, mais s'il n'y a pas de « catégorie » je montre tous les produits.

Ces 2 URL seraient valides:

/Produits/Page

/Produits/Page catégorie = voitures

Le RouteLink est dans mon téléavertisseur donc je pensais que je pouvais faire passer la catégorie? paramètre dans les liens dans le pager afin de persister la catégorie entre les pages. Cependant, je ne suis pas sûr de savoir comment je gère le cas où aucune catégorie n'est choisie par rapport à quand une catégorie est choisie.

Je sais que je peux le faire:

<%= Html.RouteLink("<<<","Products",new { page=(Model.Products.PageIndex), category=cars }) %> 

Mais est-il possible de gérer les deux cas sans créer une maladroite instruction if?

Répondre

3

C'est simplement une idée mais ne pouvez-vous pas passer un paramètre de catégorie vide?

<%= Html.RouteLink("<<<","Products",new { page=(Model.Products.PageIndex), category=(ViewData["CategoryName"]) }) %> 

Et dans votre controleur de produits où vous obtenez la page, vérifiez s'il existe ou pas?

public ActionResult Index(int page, string category) 
{ 
    ViewData["CategoryName"] = category; 

    if(!string.IsNullOrEmpty(category)){ 
     //paging with category 
    }else{ 
     //paging without category 
    } 
    return View("Create"); 
} 

Ou est-ce que vous voulez dire par "déclaration si maladroite"?

+0

Merci pour l'exemple détaillé. Je ne savais pas que si vous passez vide ou null dans les routValues, il ne produirait pas le nom de la valeur. Très sympa! – dtc

+0

Mon plaisir, content d'avoir pu aider – Peter

2

Si voitures variables est une chaîne nulle ou vide, la méthode Html.RouteLink ne sera pas ajouter catégorie paramètre à l'URL automatiquement. Vous n'avez pas besoin de faire des vérifications supplémentaires.

+0

Merci. Peut-être que c'est parce que je n'y suis pas habitué ou peut-être que je suis juste bête mais lentement je commence à comprendre les conventions de asp.net MVC ... bien que cela me semble souvent "magique". – dtc