ページビューのリストからレコードのリストを表示するインデックス機能を実装しています。検索機能がPaginatedListテーブルC#MVCのユニークレコードのpageIndex> 0を検索するとエラーが発生する
1のために働く
Initial index view of records on when page loads
)検索ボックスの値がテーブルに複数のレコードと一致した場合、それはこれらのレコード
2のリストを示し、検索ビューに移動します。)ユーザーが存在しない検索で型をクリックした場合。ユーザーは現在のページに留まり、エラーメッセージが表示されます。
3.)テキストボックスが空である間にユーザーが検索をクリックすると、現在のページに適切なエラーメッセージが表示されます。
ISSUE
4)の場合、現在のビューに滞在しながら、この一つのレコードを再調整、一つのレコードを返す検索でユーザーの種類のみ動作 1、すなわち場合は、リストをスクロール..ていない場合ページ1,2,3などに移動し、固有のレコードを検索します。「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。 しかし、ページの新しいインスタンス(私はリストの最初のレコードを見ています)に存在する場合、存在するすべてのユニークなレコードを検索することができ、ビューにロードされます。
URL(作品検索用)最初のレコード/ページ の中 - ページ= 0 または localhosturl /製品 - ?localhosturl /製品
URLではない(仕事をdoesntの検索のための)最初のページの中に - 製品ページ= 1 ..私は私が通過ナビゲートしているのであればどのように一意のレコードの検索作業を行うことができますオブジェクト参照設定されていないエラー
int pageSize = 1;
var currentPageIndex = page ?? 0;
PageIndex = currentPageIndex;
PageSize = pageSize;
//string currentFilter = ViewBag.CurrentFilter;
ViewData["CurrentFilter"] = searchString;
//keep current page state(number) during update/save
ViewBag.CurrentPage = page;
var viewModelQuery = (from c in db.q_product.AsEnumerable()
orderby c.q_barcode
select new ProductViewModel
{
//viewModel properties
});
if (!String.IsNullOrEmpty(searchString))
{
viewModelQuery = viewModelQuery.Where(s => s.q_description.ToUpper().Contains(searchString.ToUpper().Trim())
|| s.q_barcode.Contains(searchString.Trim()));
searchCount = viewModelQuery.Count();
if (searchCount > 1)
{
//if more than one record in query
//we want to show the list of this search (on a different page)
TempData["String"] = searchString.Trim();
return RedirectToAction("Search", new { id = searchString });
}
if (searchCount == 0)
{
//if no record was found in query
//lets stay on current page and return "not found" message
TempData["NoRecordMessage"] = "Record not found!";
return RedirectToAction("Index", new { page = page });
}
}
var pagedProduct = new PaginatedList<ProductViewModel>(viewModelQuery, currentPageIndex, pageSize);
//Lets populate our dropdown lists
ViewBag.department_guid = new SelectList(db.q_department, "department_guid", "q_name", pagedProduct.SingleOrDefault().department_guid);
ViewBag.q_subdepartmentid = new SelectList(db.q_subdepartment, "department_guid", "q_subdepartmentname", pagedProduct.SingleOrDefault().q_subdepartmentid);
ViewBag.q_groupid = new SelectList(db.q_group, "q_groupid", "q_groupname", pagedProduct.SingleOrDefault().q_groupid);
ViewBag.q_measuretype = new SelectList(db.q_unitofmeasure, "q_measuretype", /*"UnitNameAndValue",*/ "q_unit", pagedProduct.SingleOrDefault().q_measuretype);
ViewBag.vat_guid = new SelectList(db.q_vat, "vat_guid", "q_rate", pagedProduct.SingleOrDefault().vat_guid);
if (searchString == "" || (searchCount > 0 && searchString.Trim().Length == 0))
{
//if user clicked search button without text on search box
//stay on current page and return "no search" message
TempData["EmptySearch"] = "No search found!";
return RedirectToAction("Index", new { page = page });
}
if (searchCount == 1)
{
//we have found 1 record in list
TempData["UniqueRecord"] = "1 record found!";
return View(pagedProduct);
}
//otherwise show default paginatedList on page load
return View(pagedProduct);
を取得するページ= 2、ページ= 3など ?ページ/リスト?
追加情報:08/06/17 おそらく、paginatedListクラスの現在のページインデックスとスキップメソッドで問題が発生する可能性があります。私は(別のクラスファイルで)この行からPaginatedList.csを.SKIP(pageIndexパラメータ*がPageSize)を削除するとユニークな製品のための
this.AddRange(viewModelQuery.Skip(PageIndex * PageSize).Take(PageSize));
検索が完全に正常に動作しますが、レコードは、リスト上の次の項目にスクロールしません。