Asp.net mvc 4 如何处理同时传递给控制器的自定义分页系统和模型信息

Asp.net mvc 4 如何处理同时传递给控制器的自定义分页系统和模型信息,asp.net-mvc-4,Asp.net Mvc 4,我有一个表,每一页有10个条目,大约130页 如何处理同一视图上的操作,同时仍将分页保留在内存中 @using (Html.BeginForm()) { <label>All Logs since :</label> <input id="startDate" name="startDate" class="datepicker" type="text" value="@Model.option.startDate.Value.ToS

我有一个表,每一页有10个条目,大约130页

如何处理同一视图上的操作,同时仍将分页保留在内存中

@using (Html.BeginForm())
        {
        <label>All Logs since :</label> <input id="startDate" name="startDate" class="datepicker" type="text" value="@Model.option.startDate.Value.ToString("dddd, dd MMMM yyyy")" />

<input type="submit" />
        }
现在,当用户提交一个新日期时,我会做完全相同的事情,但有一点不同,那就是将默认日期设置为如下所示:

[HttpPost]
    public ActionResult Index(LogOption mod)
    {

        model.option.startDate = mod.startDate;
     }
问题是,如果在修改startDate筛选器之后,如果用户单击以从我的表中更改页面,则会再次调用get操作,并且我不知道如何处理原始默认设置的覆盖。我是否可以以更简洁的方式执行此操作,而不必在会话中设置信息

我想我需要将模型与获取信息一起传递,但我一直无法做到这一点

 [HttpPOST]
    public ActionResult Index(MainViewModel mod, int? id)
    {
     }

但是当我这样做时,我的MainViewModel总是空的,所以除了在会话中保存信息之外,我不知道如何获取这两个信息,但是我被告知要避免这样做,并且可以用其他方式来做。您面临的问题类型是状态持久性问题。解决此问题的方法有很多(因为HTTP在设计上是无状态的),但最简单的方法是:

  • 使用cookies保存startDate
  • 使用会话(在大多数情况下将使用cookie)
  • 在包含过滤信息的实体周围使用包装器模型
我将向后者展示:

class DateWrapper 
{
    public Date StartDate {get;set;}
    public MainViewModel Model {get;set;}
}

在您看来,您可以检查
null==StartDate
,并根据结果生成包含筛选信息的链接(作为GET参数或通过另一个路由)。

我刚刚意识到我正试图将GET信息保存到POST操作中。。。哪种逻辑有点愚蠢

MainViewModel是否有无参数构造函数?我同意最后一种方法:让1 GET操作获取模型和其他参数。@Cam我做不到,我的mainviewmodel总是设置为null。。。我还没有在其中设置任何构造函数,它主要只有3个自定义对象(用户配置文件、日志列表和过滤器选项),3个自定义对象也没有设置任何构造函数(好的,用户配置文件是mvc4默认设置的,所以它可能已经,还没有工作过),也许这会有所帮助,但也许不是:记住在你的视图中设置模型类型。在我进一步深入之前,我收到了一个新的紧急命令,我会在我重新开始这个项目时通知你,如果我可以这样实现的话对不起,我只是在我的问题中犯了一个错误,我遇到的问题是,在执行POST操作时,我试图从GET获取页面id并保存该变量。。。我意识到,如果用户试图过滤搜索结果,我只需要去掉POST值,并强制用户返回到第1页。
class DateWrapper 
{
    public Date StartDate {get;set;}
    public MainViewModel Model {get;set;}
}