2010-05-07 4 views
1

Supposons que j'ai une méthode ActionResult avec un paramètre pageNumber et un paramètre category.Comment appeler le paramètre querystring précédent dans .aspx

L'utilisateur devrait être en mesure de définir la catégorie qu'il est en train de parcourir qui serait un lien Action à la première page de cette catégorie. Toutefois, si j'ai un autre lien ActionLink où je vais à la page suivante, le paramètre de catégorie reviendrait à défaut.

Comment puis-je régler le paramètre de catégorie pour qu'il soit le même que sur la page précédente.

EDIT: A l'origine censé être un commentaire, mais croître en taille

Désolé, je vois ma question n'est pas assez écrit clairement dans une sorte de hâte. Je suis en train d'essayer de faire ce que vous faites mais au lieu de définir la catégorie comme 1 je ne l'ai pas défini comme le paramètre était lorsque cette page a été chargée.

Scénario: Je suis naviguer sur le site et cliquez sur « chaussures » (categoryID = 3) Wich a ce ActionLink <%=Html.ActionLink("Shoes", "Index", new { categoryID = 3 }) %>

Je reçois la première page de chaussures et je wan't pour passer à la page suivante qui a un lien d'action <%=Html.ActionLink(">>>", "Index", new { page = model.currentPage + 1 }) %> Je ne peux pas inclure le paramètre categoryID dans ce code actionlink car dans mon code de vue générique, je ne sais évidemment pas quelle catégorie est active.

Donc, quand je clique dessus, il revient à la catégorie par défaut.

Répondre

0

Il semble que vous ayez besoin d'ajouter l'identifiant de catégorie en tant que propriété de votre objet de modèle afin qu'il soit disponible dans la vue. Donc, votre code de vue ressemblerait à ceci:

<%=Html.ActionLink(">>>", "Index", new { categoryId = model.categoryId, page = model.currentPage + 1 }) %> 
+0

Je vois que ma question n'était pas assez claire alors j'ai ajouté un peu. Je vous remercie. –

+0

Oui, c'est une possibilité. –

0

Le problème que j'ai eu avec le stockage des paramètres entre les appels que le paramètre page n'a pas été lié au paramètre de catégorie et serait toujours ajouté séparement puis j'ai perdu la valeur de l'autre. Par exemple ici:

public ActionResult Products(int? page, int? category) 
    { 
     var result = repo.GetAllProductsByCategory(category); 

     result.Skip(PAGE_SIZE * (page -1)).Take(PAGE_SIZE) 

     return View(result); 
    } 

A l'intérieur du .aspx dans pseudocode

actionlink ("Shoes", "Products", new { category = 2 }) actionlink ("Pants", "Products", new { category = 3 }) actionlink ("Hats", "Products", new { category = 4 })

"foreach code shows first page"

actionlink ("next page", Products, new { page = lala.nextPage })

ici lorsque je clique sur la page suivante la catégorie choisie est perdue car il jette seulement dans le paramètre pour le numéro de page .

J'ai moi-même finalement utilisé Ajax et partialViews pour résoudre ce problème, mais j'ai aussi imaginé un autre moyen simple qui fonctionnerait probablement. Il suffit de stocker la dernière catégorie choisie dans le contrôleur en tant que variable. Comme ceci:

public ActionResult Products(int? page, int? category) 
    { 
     m_category = category; 

     var result = repo.GetAllProductsByCategory(m_category); 

     result.Skip(PAGE_SIZE * (page -1)).Take(PAGE_SIZE) 

     return View(result); 
    } 

De cette façon, nous n'oublierons pas dans quelle catégorie l'utilisateur naviguait quand il tourne la page. Il a encore besoin d'être implémenté comme par exemple comment l'annuler à nouveau si l'utilisateur parcourait tous les produits au lieu d'une catégorie particulière (lien d'action où new category = null peut-être).

+0

J'aurais pu aussi le stocker dans ViewData. –

Questions connexes