私はc#asp.net MVCプロジェクトを持っています。私は検索を実行しており、検索結果の1つの詳細ページの検索結果にアクセスしたい。後で使用するために検索結果を保存する - 結果ビューにアクセスする
これは、最後の検索結果の次のプロパティにリンクする詳細ページで "< prev | next>"リンクを持つことができるようにするためです。
私のアプローチは、検索結果オブジェクトをセッション変数に入れることですが、実際にアクセスするコードを把握することはできません。以下のセッション["SearchResults"]で監視すると、配列を保持しているように見える結果ビューにレコードが表示されます。
誰かが私にこのすべてについて間違っていると思っていると知っていることを知っています。私は悟りを待つことができません。
誰かが、公共の財産として最後の検索結果をリポジトリに保存するだけでいいのですか?あるいは、誰かが私がやるべきことをやるために全面的に良い方法をお勧めしますか?
この
はここに私のコントローラpublic ActionResult Search(int? page, Search search)
{
search.regusApi = Convert.ToBoolean(ConfigurationManager.AppSettings["regusApiLiveInventory"]);
Session["SearchResults"] = MeetingRoomRepositoryWG.Search(search).AsPagination(page ?? 1, 7);
return View(new SearchResultsWG { SearchCriteria = search, Locations = MeetingRoomRepositoryWG.Search(search).AsPagination(page ?? 1, 7) });
}
public ActionResult NiceDetails(String suburb, String locationName, int id)
{
**Here I want to acceess the session variable**
return View(MeetingRoomRepositoryWG.RoomDetails(id).First());
}
あるリポジトリからのコードです:
public static List<Location> Search(Search search)
{
String LongLatString = search.LongLat;
LongLatString = LongLatString.Substring(1, LongLatString.Length - 2);
var LonLatSplit = LongLatString.Split(',');
var latitude = Convert.ToDecimal(LonLatSplit[0]);
var longitude = Convert.ToDecimal(LonLatSplit[1]);
using (var context = new MyContext())
{
var query = context.Locations.Include("Location_LonLats").ToList();
query.OrderBy(x => (Convert.ToDecimal(x.Location_LonLats.Lat) - latitude) * (Convert.ToDecimal(x.Location_LonLats.Lat) - latitude)
+ (Convert.ToDecimal(x.Location_LonLats.Lon) - longitude) * (Convert.ToDecimal(x.Location_LonLats.Lon) - longitude));
return query;
}
}
ユーザーの数はまだわかりませんが、あなたが正しいとすれば、規模が適切でない可能性があります。私が検索に合格して、次のものをクリックしたときにそれをやり直すと、最初にクリックした検索結果を知る必要があります。私は彼らがクリックした結果番号を検索結果ページに保存することができたと思います。ページネーションを使用してどのように検索結果が表示されたかを知るにはどうすればよいのでしょうか?この情報でも、私は上記と同じ形式で検索結果にアクセスする必要があります(これまでできなかった)。 – iKode
検索パラメータをあなたの「次の」リンクと「前の」リンクのURL。または、次と前のボタンをポストフォームにし、検索パラメータをフォームデータとして追加します。 Ajax呼び出しも可能です。 – Joppe
検索メソッドでIEnumerableを返し、yieldを使用してデータを返すと、Linqを使用してページ付けを簡単に行うことができます。結果をスキップするだけでは最適化できません。何とかSkip and Takeパラメータをコールに含めることができればベストでしょう。検索結果のご注文は不幸なことですが、あらかじめ注文しておく必要があります。 – Joppe