1

次の問題を解決するための最善の方法を探しています。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>
    }       
4

3 に答える 3

1

AJAXを使用して「バスケットに追加」メソッドを呼び出してみませんか?そうすれば、ユーザーは検索ページを離れてアイテムをバスケットに追加する必要がなくなり、検索が維持されます。

また、検索パラメーターを実装するときは、それらのパラメーターをクエリ文字列に渡すことがよくあります。これらは引き続きSearchViewModelに入力されますが、クエリ文字列に含めることで、必要に応じてWebリクエスト間で簡単に渡すことができます。

于 2011-05-02T13:08:25.360 に答える
1

リダイレクトがTempDataを爆破していると思います。コントローラーコードの「リダイレクト」を「ビュー」に置き換えて、ビュー名(URL全体ではなく)を渡してみてください。

(注: コントローラー アクションがビュー モデルを作成するために何かを行っていた場合は、そのコードをコピーして、ビューへの呼び出しの直前に挿入する必要があります (プライベート メソッドに引き出して、両方の場所から呼び出します))

于 2011-05-02T17:29:00.660 に答える
0

AJAX を使用できない場合は、別のオプションがあります。

  1. すべてのバスケット アイテムをセッションに保存します (当然のことです)。
  2. 検索結果ページをレンダリングするとき、各アイテムがすでにバスケットに入っているかどうかを確認します。ある場合は、チェックされていることを示します。
  3. ユーザーが「バスケットに追加」をクリックすると、バスケットをクリアし、この最後の投稿を使用してバスケットに再入力します。

もちろん、ページネーションを使用しているかどうかはわかりません。もしそうなら、この解決策はおそらくうまくいかないでしょう...

于 2011-05-02T13:22:12.000 に答える