2015-07-10 29 views
3

我在索引頁上有分頁。如果您選擇一行並編輯該行並保存該記錄,則您將返回到索引,其中前一個選定行和頁面可見。所以,這很好:)。但是,如果現在轉到其他視圖(控制器)並返回到更新記錄的頁面,則分頁不是從第1頁開始,而是從先前編輯記錄的頁面開始。因此,如何管理您將返回到第1如果您離開控制器,清除會話

我有這樣的:

[Route("sort/{SortColumn}/{SortOrder?}", Name = "Sort-SubmittedForms")] 
[Route("sort/{SortColumn}/{SortOrder?}", Name = "Sort-SubmittedForms")] 
[Route("page/{Page:int}/{SortColumn}/{SortOrder?}", Name = "Paging-SubmittedForms")] 
[Route("search/{SearchString}")] 
[Route()] 
public ActionResult Index(string searchString, string filter, string currentFilter, string sortColumn, string sortOrder, int? page) 
{ 
    IOrderedQueryable<SubmittedForm> entities = db.FilteredSubmittedForms; 

    if (searchString != null) page = 1; else searchString = currentFilter; 
    if (page == null && Session["SubmittedFormpage"] != null) 
     page = (int)Session["SubmittedFormpage"]; 

    bool isHandler = ApplicationUserManager.IsProductHandler(this.User); 

    bool hideArchivedOrders = true; 

    if (filter != null) { 
     int productId = 0; 
     string stateFilter = null; 
     if (filter.StartsWith("o_")) { // Order state 
      if (isHandler) 
       filter = null; 
      else { 
       stateFilter = filter.Substring(2); 
       OrderState oState = db.OrderStates.FirstOrDefault(s => s.Code == stateFilter); 
       if (oState == null) 
        filter = null; 
       else { 
        entities = (IOrderedQueryable<SubmittedForm>)entities.Where(
           s => s.Order.OrderState.Code == stateFilter 
         ); 
        AddFixedNotification(String.Format(Resources.Entity.Environment.FitleredByOrderStateMessage, oState.Title)); 
        hideArchivedOrders = false; 
       } 
      } 
     } 
     else if (filter.StartsWith("s_")) { // Submitted form state 
      stateFilter = filter.Substring(2); 
      SubmittedFormStateEnum sfState; 
      if (SubmittedFormState.TryCodeToId(stateFilter, out sfState)) { 
       entities = (IOrderedQueryable<SubmittedForm>)entities.Where(
          s => s.SubmittedFormStateId == (int) sfState 
           && s.Order.OrderState.Code == OrderState.CompletedCode 
        ); 
       AddFixedNotification(String.Format(Resources.Entity.Environment.FilteredBySubmittedFormStateMessage, SubmittedFormState.IdToLocalizedName(sfState))); 
      } 
      else { 
       filter = null; 
      } 
     } 
     else if (int.TryParse(filter, out productId) && productId > 0) { 
      Product product = db.Products.Find(productId); 
      if (product == null) productId = 0; 
      else { 
       entities = (IOrderedQueryable<SubmittedForm>)entities.Where(
         s => s.Product.Id == productId 
       ); 
       AddFixedNotification(String.Format(Resources.Entity.Environment.FilteredByProductMessage, product.Name)); 
      } 
      filter = productId.ToString(); 
     } 
     else 
      filter = null; 
    } 

    if (isHandler) { 
     entities = FilterSubmittedFormsForProductHandler(entities); 
    } 
    else if (hideArchivedOrders) { 
     entities = (IOrderedQueryable<SubmittedForm>)entities.Where(
          s => s.Order.OrderState.Code != OrderState.ArchivedCode 
        ); 
    } 

    if (!String.IsNullOrEmpty(searchString)) { 
     entities = (IOrderedQueryable<SubmittedForm>)entities.Where(
       s => s.Product.Name.ToUpper().Contains(searchString.ToUpper()) 
     ); 
     AddFixedNotification(String.Format(Resources.Entity.Environment.FilteredBySearchTermMessage, searchString)); 
    } 

    switch (sortColumn) { 
     case "id": 
      entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.Id) : entities.OrderBy(s => s.Id); 
      break; 
     case "product": 
      entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.Product.Name) : entities.OrderBy(s => s.Product.Name); 
      break; 
     case "modified": 
      entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.ModificationDate) : entities.OrderBy(s => s.ModificationDate); 
      break; 
     case "attach": 
      entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.SubmittedFormAttachments.Count) : entities.OrderBy(s => s.SubmittedFormAttachments.Count); 
      break; 
     case "orderstate": 
      entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.Order.OrderStateId) : entities.OrderBy(s => s.Order.OrderStateId); 
      break; 
     default: 
      sortColumn = "id"; 
      sortOrder = "desc"; 
      entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.Id) : entities.OrderBy(s => s.Id); 
      break; 
    } 

    ViewBag.SortColumn = sortColumn; 
    ViewBag.SortOrder = sortOrder == "desc" ? "desc" : ""; 
    ViewBag.SearchString = searchString; 
    ViewBag.Filter= filter; 
    Session["SubmittedFormpage"] = page; 


    if (isHandler) 
     ViewBag.OrderStates = new Dictionary<string, string>(); 
    else 
     ViewBag.OrderStates = db.OrderStates.ToDictionary(s => s.Code, s => s.Title); 

    bool production = !StateHelper.IsTestMode(); 
    ViewBag.ProductsInUse = db.Products.Where(p => p.SubmittedForms.Where(f => f.Order.IsProduction == production).Count() != 0) 
     .OrderBy(p => p.Name) 
     .ToDictionary(p => p.Id.ToString(), p => p.Name + " (" + p.SubmittedForms.Where(f => f.Order.IsProduction == production).Count() + ")"); 

    int pageSize = StateHelper.GetPageSize(); 
    int pageNumber = StateHelper.HasPageSizeChanged ? 1 : (page ?? 1); 

    if (Session["SubmittedFormid"] != null) { 
     int fid = (int)(Session["SubmittedFormid"]); 
     //object p = entities.FirstOrDefault(f => f.Id.Equals(fid)); 
     IEnumerable<IEnumerable<SubmittedForm>> pp = entities.Partition(pageSize); 
     //int calculatedPage = 0; 
     foreach (var item in pp) { 
      Debug.Print(pp.Count().ToString()); 
     } 
    } 

    return View(entities.ToPagedList(pageNumber, pageSize)); 
} 

謝謝

+0

該行爲是由於瀏覽器緩存,你可能會做的是禁用客戶端緩存該特定的「行動」。也許你可以試試'[OutputCache(NoStore = true,Duration = 0,VaryByParam =「None」)]''。裝飾你的'索引'行動,看看瀏覽器服從。 –

+0

(不相關)你的控制器變得有點大。你有沒有考慮過使用服務層? – Rockyy

回答

0

你必須同時從一個視圖到另一個視圖去會話分配1。那麼下次它會返回到第一頁。

Session [「SubmittedFormpage」] = 1;