次の問題を解決するための最善の方法を探しています。SearchViewModel で利用可能な、選択可能なさまざまな基準を持つ検索ページがあります。これで、検索により製品である SearchResults のリストが返されます。それらはバスケットに直接追加できます。問題は、商品をバスケットに追加するアクションが SearchController ではなく BasketController にあることです。ユーザーがそれをクリックすると、SearchPage に戻りますが、行った選択はすべて失われます。
if (Request.UrlReferrer != null)
return Redirect(Request.UrlReferrer.ToString());
TempData を使用して問題を回避しようとしましたが、「クエリの結果を複数回列挙することはできません。」という例外が発生します。
private SearchViewModel EnsureViewModel(SearchViewModel viewModel)
{
if (TempData["SearchModel"] != null && viewModel.SearchResult == null)
viewModel = TempData["SearchModel"] as SearchViewModel;
TempData["SearchModel"] = viewModel;
return viewModel;
}
ここで、モデルの結果のリストを表示すると、例外がスローされます。
@Html.DisplayFor(p => Model.SearchResult)
また、部分ビューを使用してこれを行う方法があるかもしれないと考えましたか? もちろん、私の最後のリソースはコードを複製しているだけですが、そのアイデアには興奮していません...
どんなアイデアでも大歓迎です、ありがとう=)
編集 コントローラーの呼び出しは、次のようなフォームを使用して行われます。
@using (Html.BeginForm("Add", "Basket", new { id = Model.Name } ))
{
@Html.TextBox("amount", "1", new { name="amount", maxlength=7, @class = "txtfield number" })
<button><img src="@Url.Content("~/Content/images/icon_basket.gif")" border="0" width="14" height="10" class="basket" /></button>
}