【问题标题】:Webmatrix - Persisting query strings across pagesWebmatrix - 跨页面持久化查询字符串
【发布时间】:2013-12-16 15:53:15
【问题描述】:

我刚刚在我的一个搜索页面上设置了分页,但我遇到了问题,因为当我在页面之间单击时,查询字符串(我用来构建我的搜索查询)丢失了。有没有一种简单的方法来持久化它们,或者我需要编写一些花哨的 javascript 来做到这一点?

例如,我可能有一个带有以下 URL 的页面 localhost\search?qstring1=1&qstring2=2

在页面底部,我有以下代码,它提供了指向我需要保留这些查询字符串的位置的链接。

for (var i = 1; i < totalPages + 1; i++){
    <li><a href="/search1/@i">@i</a></li>
}

【问题讨论】:

    标签: jquery razor webmatrix


    【解决方案1】:

    您可以使用Request.QueryString 访问当前查询字符串。这样的事情应该可以解决问题:

    for (var i = 1; i < totalPages + 1; i++) {
        <li><a href="/search/@i?@Request.QueryString">@i</a></li>
    }
    

    您的链接最终应如下所示:

    /search?x=1&y=2
    /search/2?x=1&y=2
    /search/15?x=1&y=2
    

    UrlData[0].AsInt(1) 应该有您的页码,默认为第一页,并且您的查询字符串应该保持不变。

    【讨论】:

    • 正是我想要的!史诗般的答案。
    • 如果我没有添加任何查询字符串,它仍然会添加 ?到下一页,但不是什么大不了的事,我只是很挑剔:p
    • &lt;li&gt;&lt;a href="/search/@i@(Request.QueryString.ToString().Length == 0 ? null : "?" + Request.QueryString)"&gt;@i&lt;/a&gt;&lt;/li&gt;
    • 那还在添加?出于某种原因。
    • 如果它以某种方式到达那里,它将自行保持?,但它不会自己添加一个 - 只是对其进行了测试以确定。如果您愿意,您可以更改它的工作方式以实际删除一个空查询字符串(针对Length &lt; 2 或类似的测试)。
    【解决方案2】:

    如果您想在托管代码中执行此操作,您应该使用一些 queyrstring 构建器。您可以在哪里访问当前页面查询字符串,根据页面上的不同链接从中添加/删除键/值对。请在此处查看一种解决方案:http://weblogs.asp.net/bradvincent/archive/2008/10/27/helper-class-querystring-builder-chainable.aspx

    例如:

    //create a querystring from the current URL, add 'id','user' and 'sessionId' values and remove an 'action' value
    //output : "?id=123&user=brad&sessionId=ABC"
    string strQuery = QueryString.Current.Add("id", "123").Add("user", "brad").Add("sessionId", "ABC").Remove("action").ToString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 2016-05-27
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多