Cela devrait être facile, mais sans ViewState, je ne sais pas quoi faire (j'ai été bercé par les WebForms pendant trop longtemps, je sais !)
Mon scénario :
Voir
@foreach (var product in Model.Products)
{
<tr>
<td>@Html.ActionLink("Compare", "Compare", new { id = product.ProductId })</td>
</tr>
}
Contrôleur
public ActionResult Compare(int id = 0)
{
var product = SelectProduct(id); // selects the product from a list of cached products.
if (product != null)
{
// _productDetails is a Model specifically for my View.
_productDetails.ComparedProducts.Add(product);
}
return View("Index", _productDetails);
}
Bien entendu, lorsque vous cliquez sur "Comparer" pour chaque article, celui-ci est ajouté à la liste des produits comparés. Mais comme il n'y a pas de ViewState, cette liste sera effacée à chaque rafraîchissement de la page et perdra le dernier produit. Je veux que les produits soient conservés dans cette liste ComparedProducts, mais comment ?
Je suppose qu'ils doivent être ajoutés à la chaîne de requête, donc /Carousel/Compare/?id=2122,1221,1331,1333 etc. Si c'est le cas, comment est-ce possible ?
Merci d'avance.
Mise à jour
Si je a fait Je souhaite utiliser la chaîne de requête, comment faire ?
J'ai essayé :
<td>@Html.ActionLink("Compare", "Compare", new { id = product.ProductId, compared = Model.ComparedProducts.Select(a => a.ProductId) })</td>
Mais cela fait ressortir :
compared=System.Linq.Enumerable%2BWhereSelectListIterator`2[Product%2CSystem.Int32]
Ce à quoi je m'attendais vraiment. Je suppose que je devrais créer une autre propriété ViewModel et simplement y stocker les identifiants comparés pour ne pas avoir trop de logique commerciale dans ma vue ?