【问题标题】:MVC4: DateTime column sorting in asp.net mvc webgridMVC4:asp.net mvc webgrid中的日期时间列排序
【发布时间】:2015-03-10 11:26:43
【问题描述】:

我一直在尝试对asp.net mvc webgrid 中的DateTime 列进行排序

这是我的代码:

 grid.Column(header: "Product Purchased Date",columnName:"PurchasedDate" canSort: true,format: @<text>
        @item.PurchasedDate.ToString("MM/dd/yyy")</text>

当我尝试使用上面的代码时,我得到了这个错误:

无法从“lambda 表达式”转换为 'System.Func'

System.Web.Helpers.WebGrid.Column(string, string, System.Func, string, bool)' has some invalid arguments 的最佳重载方法匹配。

如果我在不使用 columName 的情况下应用上述代码,我将无法执行排序。

如果我错过了什么,请道歉。

【问题讨论】:

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


    【解决方案1】:

    我建议,如果要将其作为字符串排序,请在模型对象中添加一个函数,该函数将值作为字符串返回,而不是内联转换。所以对象上会有一个诸如 PurchasedDateAsString 之类的字段。

    例如,这是我在最近的一个项目中使用的东西。字段 DateRange 以字符串形式返回,并且可以像“基础”字段一样对其进行排序:

    public class PeriodView
    {
        [Key]
        public int PeriodId { get; set; }
    
        public string Name { get; set; }
        public int Number { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
        public int Year { get; set; }
        public string Month { get; set; }
    
        public string DateRange
        {
            get
            {
                var start = String.Format("{1}-{0}",
                    CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(StartDate.Month).Substring(0, 3),
                    StartDate.Day);
    
                var end = String.Format("{1}-{0}",
                    CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(EndDate.Month).Substring(0, 3),
                    EndDate.Day);
    
                return String.Format("{0} to {1}", start, end);
            }
        }
    }
    

    【讨论】:

    • Hai Shane 感谢您的回复。在模型对象中不进行排序是否有任何更改?
    • 将您的代码返回为“01-JAN”。但我需要这种格式'01/08/2014'。
    • 正确。当然,您可以使用 String.Format() 返回任何值。但是,我认为您想要一个显示和排序版本。您的显示版本使用 01/08/2014 格式,但排序版本为 2014-01-08(年-月-日),因此您不会获得环绕效果。
    • 有什么解决办法吗?因为我必须在 UI 中以这种格式 '01/08/2014' 显示日期
    • 是的,您指定了两个字段,对一个进行排序,但显示另一个。
    【解决方案2】:

    如果将 DateTime 转换为字符串并格式化,WebGrid 会将列排序为字符串,这对于 DateTime Format Column 预期结果是不正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2013-01-07
      • 2013-01-03
      • 2021-05-24
      • 1970-01-01
      相关资源
      最近更新 更多