これは簡単なことですが、ViewStateがないと、ここではわかりません(WebFormsに長い間悩まされてきました、知っています!)。
私のシナリオ:
意見
@foreach (var product in Model.Products)
{
<tr>
<td>@Html.ActionLink("Compare", "Compare", new { id = product.ProductId })</td>
</tr>
}
コントローラ
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);
}
明らかに、各アイテムの「比較」をクリックすると、比較対象製品リストに追加されます。ただし、ViewStateがないため、これはページが更新されるたびにクリアされ、最後の製品が失われます。このComparedProductsリストに製品を保持したいのですが、どうすればよいですか?
クエリ文字列に追加する必要があると思いますので、/ Carousel / Compare /?id = 2122,1221,1331,1333など。そうであれば、これはどのように可能ですか?
前もって感謝します。
更新しました
クエリ文字列ルートに移動したい場合、これを行うにはどうすればよいですか?
私はもう試した:
<td>@Html.ActionLink("Compare", "Compare", new { id = product.ProductId, compared = Model.ComparedProducts.Select(a => a.ProductId) })</td>
しかし、それは次のことをもたらします。
compared=System.Linq.Enumerable%2BWhereSelectListIterator`2[Product%2CSystem.Int32]
本当に期待します。さらにViewModelプロパティを作成し、そこに比較IDを格納するだけで、ビュー内に多くのビジネスロジックがないようにすると思いますか?