Asp.net mvc 在搜索页面上使用会话值的最佳实践

Asp.net mvc 在搜索页面上使用会话值的最佳实践,asp.net-mvc,session,Asp.net Mvc,Session,我正在使用MVC5构建一个应用程序,对会话值的使用有疑问 我有一个报告,其中有2个日期选择器和3个下拉列表。没有一项是强制性的 我需要做的是确保如果用户从列表中选择一些内容,运行报告,然后转到详细信息页面(一个转到另一个视图的操作链接),当他们返回到报告链接时,他们的搜索是完整的 此外,如果他们在页面上点击F5,他们的搜索参数将保持不变 好的,我有一个控制器动作 public ActionResult ClaimReport(DateTime? fromDate, DateTime?

我正在使用MVC5构建一个应用程序,对会话值的使用有疑问

我有一个报告,其中有2个日期选择器和3个下拉列表。没有一项是强制性的

我需要做的是确保如果用户从列表中选择一些内容,运行报告,然后转到详细信息页面(一个转到另一个视图的操作链接),当他们返回到报告链接时,他们的搜索是完整的

此外,如果他们在页面上点击F5,他们的搜索参数将保持不变

好的,我有一个控制器动作

     public ActionResult ClaimReport(DateTime? fromDate, DateTime? toDate, int staffId = 0, int teamId = 0, int vehicleId = 0)
此操作传递了大量变量,这些变量构成了搜索的基础。当按下搜索按钮时,我从视图中调用ClaimReport方法,并将下拉列表和日期选择器中选择的所有值传递给此方法,然后在数据库中过滤结果

然后我会这样做:

        var sessionSearch = Session["searchParams"] as staffList;

        //No previous search exists - create an empty session
        if(sessionSearch == null)
        {
            sessionSearch = new staffList{
            teamId =0,
            fromDate = DateTime.Now.AddMonths(-1),
            toDate = DateTime.Now,
            vehicleId = 0,
            staffId =0};
        }
        //A previous search has been submitted - update the session
        else
        {
            sessionSearch.teamId = teamId;
            sessionSearch.fromDate = fromDate;
            sessionSearch.toDate = toDate;
            sessionSearch.vehicleId = vehicleId;
            sessionSearch.staffId = suId;
        }
这里的理论是,如果不存在会话,我将创建一个新的空搜索,否则我将获取会话中已经存在的内容

然后,在最终执行此操作之前,我将执行所有数据库操作:

        Session["searchParams"] = sessionSearch;    
        return View(report.ToList());
这会将参数保存回会话,并将我的报告作为视图返回到屏幕

这对于第一次调用方法有效,但是如果我点击F5,页面将重新加载,并且再次加载方法ClaimReport,但是很明显,该方法的所有参数都会恢复为默认值,因为由于页面加载的方式,它们没有从视图中抓取

会话仍然存在,但它被现在有效的空白搜索覆盖

有谁能帮助我改进这里发生的事情吗?我觉得我错过了一些明显的东西


许多银行

这对方法的第一次调用有效,但如果我点击F5,页面将重新加载,方法ClaimReport将再次加载
——这就是为什么我总是将这些内容保存到模型中。因此,如果我取下我的模型(即数据库对象),然后使用该对象和我的搜索pram创建一个视图模型,这可能会起作用吗?我不需要将这些值存储在数据库中,是吗?你必须将它们存储在某个地方。当您需要检索它们时,应用程序还将如何记住它们?然后如何将其绑定到一个会话?也就是说,只有一个会话可以将这些参数应用到页面?按用户和页面跟踪它。