0

画面に少しのデータを表示する MVC アプリを作成しています。数百または数千のデータが得られる可能性があります。

したがって、このチュートリアルに従って PagedList 形式を使用しています。

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net- mvc-アプリケーション

それは私を助けました。ページリストが機能します。しかし、解決方法がわからないという問題が 1 つあります。チュートリアルでは、1 つのパラメーター (テキスト ボックス) のみがあり、ページを変更してもテキスト ボックス内のテキストが "フラッシュ" されないように、チュートリアルでは ViewBag パラメーターを保持および属性付けすることで値を "メモリ内" に保持します。

現在、私は検索エンジンのようなものを構築しており、現在 23 個のパラメーターとカウントを使用しています。これらのパラメーターには、チェックボックス、テキストボックス、およびドロップダウンリストがあります。

私の質問: これらをメモリに保持する方法はありますか? どうすればよいですか?チュートリアルと同じように、それらをすべてメモリに保持する必要がありますか?

どうもありがとうございました!

4

2 に答える 2

0

チュートリアルでは、実際にはリクエスト間で「メモリに保持」されていません。各リクエストで、値がアクション メソッドに渡され、ビューに渡されて、ページングおよびソート リンクの作成に使用されます。

以前は、ページングするときに、各パラメーターを個別に追加する代わりに、クエリ文字列を読み取り、提供された各パラメーターを使用してリンクを構築するメソッドを使用していました。

NameValueCollection queryString = helper.ViewContext.HttpContext.Request.QueryString;

foreach (string key in queryString)
{
   if (key != null)
   {
       if (!newValues.ContainsKey(key))
       {
           if (!string.IsNullOrEmpty(queryString[key]))
           {
                newValues[key] = queryString[key];
           }
        }
   }
}

次に、リンクを作成するために、次を使用します。

            string link;

            if (!string.IsNullOrEmpty(routeName))
            {
                link = helper.RouteLink(text, routeName, newValues).ToString();
            }
            else
            {
                actionName = actionName ?? values["action"].ToString();
                controllerName = controllerName ?? values["controller"].ToString();

                link = helper.ActionLink(text, actionName, controllerName, newValues, null).ToString();
            }

            return string.Concat(" ", link);
于 2013-02-15T17:05:48.797 に答える
0

AJAX 手法を使用している場合は、コントローラーで 2 つのアクション メソッドを作成できます。

1 つ目はビュー全体を返し、2 つ目は部分ビューを返す必要があります。

1 つ目は、検索コントロール (23 個すべて) を含みます。これらは初回のみレンダリングされます。

2 つ目は部分ビューを返し、検索クエリに必要な 23 個の奇数パラメーターによってパラメーター化されます。それらをすべて ViewModel クラスに詰め込んで、実行時に既定のモデル バインダーにバインドさせることをお勧めします。

最後に、JavaScript/jQuery を使用して 2 番目のメソッドへの AJAX 呼び出しにより、検索結果ページの結果部分をロードできます。

于 2013-02-15T17:06:51.897 に答える