Clear session if you leave controller

I have a page on an Index page. And if you select a row and edit the row and save the record, you will return to the index with the previous selected row and page. So that works well :). But if you navigate to a different view (controller) and return to the page where you updated the post, paging does not start on page 1, but starts on the page where you previously edited the post. So how to manage your return to page 1.

I have it:

[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));
}

      

thank

+3


source to share


1 answer


you need to assign session 1 when changing from one view to another. then next time it will go back to the first page.



Session ["SubmittedFormpage"] = 1;

0


source







All Articles