0

我有一张表,上面有条目,每页有 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" />
        }

提交后,我希望表格根据开始日期进行过滤。但是如果用户点击一个页面链接,我需要这个研究结果来覆盖我视图中的默认设置。这是我的控制器中的操作:

[HttpGet]
    public ActionResult Index(int? id)
    {
            MainViewModel model = new MainViewModel();

                model.option = new LogOption();
                model.option.numberOfResultPerPage = 10;
                model.option.startDate = (method to set default date)
                model.option.startPageIndex = id ?? 1;

                *** call to service with the model.options as filter and set my table's column info  and retreive the logs total in a custom class ( model.listing ) *** 

                model.totalPage = model.listing.TotalPages;

            return View(model);

现在当用户提交一个新的日期时,我会做同样的事情,但有一点不同,即将默认日期设置为类似的东西:

[HttpPost]
    public ActionResult Index(LogOption mod)
    {

        model.option.startDate = mod.startDate;
     }

问题是,如果在修改 startDate 过滤器之后,如果用户单击以从我的表中更改页面,则再次调用 get 操作,我不知道如何处理对原始默认设置的覆盖。我可以以更清洁的方式做到这一点而不必在会话中设置信息吗?

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

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

但是当我这样做时,我的 MainViewModel 总是为空,所以除了在会话中保存它之外,我不知道如何获取这两个信息,但我被告知要避免这种情况,并且可以以其他方式进行

4

2 回答 2

1

您面临的问题类型是状态持久性问题。有很多方法可以解决这个问题(因为 HTTP 在设计上是无状态的),但最简单的是:

  • 使用 cookie 保存 startDate
  • 使用会话(在大多数情况下将使用 cookie)
  • 在您的实体周围使用包含过滤信息的包装器模型

我将展示后者:

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

在您的视图中,您可以检查null == StartDate并根据结果生成包含过滤信息的链接(作为 GET 参数或通过其他路由)。

于 2012-09-30T20:32:13.107 回答
0

我只是意识到我正试图将我的 GET 信息保存到 POST 操作中......这有点愚蠢的逻辑

于 2012-10-10T18:02:18.370 回答