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