在MVC4站点的排序或分页操作期间,如何让我的WebGrid进行POST而不是GET?

时间:2013-04-01 18:15:52

标签: asp.net-mvc asp.net-mvc-4 postback webgrid

我有一个相当简单的网站,其中包含搜索部分视图和列表部分视图。它们使用多个模型汇总到索引视图中。

一切都很好。除非我单击网格列标题以排序或尝试寻呼到下一个数据列表,否则网格将返回空白状态。如果我重新提交相同的搜索条件,则网格将重新填充所有适用的数据,这些数据已正确排序或分页。

我已经跟踪了这个行为,因为WebGrid将它的分页和排序机制设置为GET而不是POST。显然,我的所有模型数据都不在提交中。

是不是有办法让WebGrid进行POST以便数据标记一起?对于WebGrid来说,似乎非常适得其反,因为它不包含想要分页或排序的数据。

3 个答案:

答案 0 :(得分:6)

老问题,但只是添加一个参考:

我更喜欢this link

建议的解决方案

使用JQuery解决了这个问题:

var links = $('a[href*=page], a[href*=sort]'), form = $('form');
links.click(function () {
            form.attr("action", this.href);
            $(this).attr("href","javascript:");
            form.submit();
        });

答案 1 :(得分:2)

这可能不是最优雅的解决方案,但它有效:

在视图中将模型添加到会话中:

Session.Add( "Model", Model );

然后,在控制器中的Index GET Action(或GET Action的任何内容)中,只需检查值并调用POST操作:

if ( Session[ "Model" ] != null )
    this.Index( Session[ "Model" ] as MyModel );

相应地清理会话。

答案 2 :(得分:0)

继上面的JQuery答案(这给我带来了成功,谢谢!)不要忘记取消它在幕后添加的webgrid自己的魔法方法。否则,您最终可能会在POST的同时发生另一个ajax GET。

在绑定到“页面”和“排序”链接之前,请执行以下操作: -

    $("#MyWebGridID").undelegate();