【问题标题】:Check if any http query exists, not by parameter检查是否存在任何http查询,而不是通过参数
【发布时间】:2012-10-26 19:31:11
【问题描述】:

由于 MVC3 WebGrid 排序默认是通过查询字符串升序,&sortdir=ASC.. 我想知道如何通过降序进行初始排序。

我在下面尝试过,使用 Request.QueryString,但在绝对没有查询字符串“?..”的情况下,这看不到,正在工作:

// Force a descending sort on page load when query string is empty
if(Request.QueryString[grid.SortDirectionFieldName].IsEmpty()){
    grid.SortDirection = SortDirection.Descending;
}

由于我最初有一个类似 ..Admin/Review 的路径,而不是 ../Admin/Review?sort=Question6&sortdir=ASC,我该如何测试这种情况?如果连查询参数都没有,上面的条件还会返回true吗?

我认为我需要从原始 url 中提取一个查询,如果它不存在,请将我的排序方向设置为降序。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 razor webgrid


    【解决方案1】:

    您可能需要将 if 语句更改为:

     if( string.IsNullOrEmpty(Request.QueryString[grid.SortDirectionFieldName]) ){
         //sort desc
     }
    

    【讨论】:

    • 第一次排序后,仍然是升序排序。如果我将逻辑更改为 !string.isnullorempty,我会通过降序获得,但它会继续以相同的方式排序..
    • 看起来我需要在某个时间点后将查询参数更改为 DESC
    【解决方案2】:

    这行得通吗?除非查询字符串变量显式为“ASC”,否则它将默认为降序。

            if (Request.QueryString[grid.SortDirectionFieldName] == "ASC")
            {
                grid.SortDirection = SortDirection.Ascending;
            }
            else
            {
                grid.SortDirection = SortDirection.Descending;
            }
    

    【讨论】:

    • 这个逻辑是网络网格最初在第一次点击时的工作方式。我想降序排序,但由于某种原因查询字符串总是返回 ASC
    【解决方案3】:

    最终使用了 JS:

    $(document).ready(function () {
        var ignoreURL = window.location.href.replace('DESC', 'ASC');
        $('#grid th a').each(function () {
            if (this.href.indexOf('ASC') > -1 && this.href != ignoreURL) {
                this.href = this.href.replace('ASC', 'DESC');
            }
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2021-08-22
      • 2016-05-16
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 2011-08-22
      • 2018-11-12
      相关资源
      最近更新 更多