这应该很容易,但是没有 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,这将在每次页面刷新时被清除并丢失最后一个产品。我希望产品保留在此 CompareProducts 列表中,但如何?
我猜它们需要附加到查询字符串中,所以 /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 存储在其中,以便在我的视图中没有太多业务逻辑?