2010-10-20 55 views
0

好吧,让我从更多的MVC人开始。我有一个结果集,我试图添加分页。我真正想要的是我的页面上的上一个和下一个按钮,它们是链接控件。我需要这些控件回发到同一页面,但有一个像页面= 4的查询parm。我如何添加这些链接?我在链接上看到PostBackUrl属性。我应该只使用Request.Url并将其填充到PostBackUrl中吗?然后我必须在parm上进行字符串搜索......它变得讨厌。这是唯一的方法吗?我曾尝试过ViewState,请不要暗示......就我而言,这是无法预测的垃圾。链接上的ASP.NET窗体参数

+0

你想做这样的事吗? http://www.4guysfromrolla.com/articles/021308-1.aspx – Greg 2010-10-20 20:56:48

+0

另外,你的字面意思是你需要一个POST还是你想获得? – Greg 2010-10-20 20:58:45

+0

是的 - 如果您只是使用QS重定向到另一个URL,我在这里看不到需要POST。请求的所有信息都在QS中 - 只需使用HTTP GET的常规链接即可。 – RPM1984 2010-10-20 22:58:44

回答

0

PostBackUrl属性用于跨页面回发,你不想这样做。

如果您想使用POST,您可以使用LinkBut​​ton,处理单击事件并重新绑定结果集。像

public void BackButton_Click(object sender, EventArgs e) 
{ 
    // Get existing page from session, viewstate, etc 
    // RebindGrid 
} 

东西,如果你想使用一个GET,你可以用一个超链接,NavigateUrl属性设置为正确的网址。喜欢的东西

int page; 
if(!int.TryParse(Request.QueryString["page"], out page)) 
    page = 1; 

if(page > 1) 
    BackUrl.NavigateUrl = Request.Path + "?page=" + (page-1).ToString(); 
else 
    NextUrl.NavigateUrl = Request.path + "?page=" + (page+1).ToString(); 
// Note: not syntax/bounds checked 

编辑: 也许你正在寻找一个Post-Redirect-Get pattern

Response.Redirect(HttpContext.Current.Request.Path + query, true); 
+0

我想要的只是做一个回贴,但附加一个get parm ...所以它的两个。 – CrazyDart 2010-10-21 17:16:37

+0

因为您提供了一些很好的链接和想法,我将为您标记答案。 – CrazyDart 2010-10-21 17:20:28

+0

如果您还有其他问题,我会尽力帮忙。 – Greg 2010-10-21 17:29:48

0

你说的是ASP.NET Webforms或MVC?

如果你在谈论Webforms,我不认为你会在这方面取得成功。我相信您需要在使用Session或其他方式进行分页之间控制此移动,或者为每个页面重新绑定您的数据。

0

我最终做的事情是把隐藏在页面上,让我需要传回的变量,然后读取这些变量。这是像页码这样的东西,它允许我计算上一页和下一页。抱歉提交我自己的答案,但这有点奇怪,我想我会告诉我最终做了什么。

由于某种原因,查看状态每次都是空的,所以它对我没有好处。这是在一个DNN应用程序,我不想花时间搞清楚viewstate为什么搞砸了。