2017-05-30 1 views
0

ページビューのリストからレコードのリストを表示するインデックス機能を実装しています。検索機能が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)); 

検索が完全に正常に動作しますが、レコードは、リスト上の次の項目にスクロールしません。

答えて

0

同様の問題を抱えている可能性のある人には、解決策が見つかりました。これは、新しいフィルタが異なるにつながる可能性があるため、ページは、1にリセットしなければなら検索文字列がページング中に変更されている場合は、このリンク

LINK

を経て、実際にページインデックスの問題でした表示するデータ。テキストボックスに値が入力され、送信ボタンが押されると、検索文字列が変更されます。その場合、searchStringパラメーターはnullではありません。

ので、私は追加する必要があるのは、このif文

 if (searchString != null) 
     { 
      //PageIndex has to be reset, if searchstring is changed during paging (user not on first page) 
      //This avoids "Object reference not set to an instance of an object" when 
      //on page 1,2,3.... etc 
      currentPageIndex = 0; 
      PageIndex = currentPageIndex; 
     } 
ました
関連する問題