0

フィルタリングする 5 つのプロパティを含む検索ページを作成しました。ユーザーが結果の 1 つをクリックすると、詳細ページが読み込まれます。ここで、ユーザーが元のフィルターを使用して検索ページに戻ることができるように、「戻る」ボタンを提供したいと考えています。

フィルター モデルを格納するために TempData を使用することを考えていました。Tempdata は 1 回の呼び出しに対してのみセッションに保存されるため、しばらくするとセッションが肥大化することはありません。

より良い解決策はありますか、それとも何か提案はありますか? お知らせ下さい!

編集: 検索ページは、データのページング、並べ替え、またはフィルター処理に ajax 呼び出しを利用します。したがって、詳細ページから戻る場合は、このすべてのデータを保存する必要があります。TempData は最善の方法ですか?

4

2 に答える 2

2

まあ、TempData は 1 回の呼び出しの値を保持しますがTempData.Keep()、セッションが期限切れになるまで使用して TempData 値を保持できます。

TempData["YourKey"] = "SomeValue";
TempData.Keep("YourKey");

それが役に立てば幸い。

于 2013-09-19T09:33:38.760 に答える
2

これにクエリ文字列を使用しないのはなぜですか? たとえば、検索リクエストは、属性が「get」に設定された<form />要素を使用して送信されます。methodこの場合、クエリ文字列から読み取るだけでフォームの状態を簡単に復元できます。コードははるかに単純になります。訪問者はページを簡単にブックマークして、後で検索結果に戻ることもできます。

意見:

@model SearchResultSet;

<form method="get" action="/search">
    <input type="text" name="q" value="@Request.QueryString["q"]" />
    <input type="submit" value="Search" />
</form>

@if (Model.Total > 0)
{
    <ul>
        @foreach (var result in Model.Results)
        {
            <li>...</li>
        }
    </ul>
}

モデル & コントローラ:

public class SearchResultSet
{
    public IList<SearchResult> Results { get; set; }
    public long Total { get; set; }
} 

public class SearchController : Controller
{  
    public ActionResult Index(string q = "")
    {
        return View(GetModel(q));
    }

    private SearchResultSet GetModel(string searchQuery)
    {
        // Get search results
    }
}

お役に立てれば。

于 2013-09-19T06:45:46.147 に答える