MVC4:asp.net mvc webgrid中的DateTime列排序

时间:2015-01-12 16:19:00

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

我一直在DateTime尝试排序 asp.net mvc webgrid列。

这是我的代码:

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

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

  

无法转换为&#39; lambda表达式&#39;至   &#39; System.Func&#39;

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

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

如果我错过任何事情,请道歉。

2 个答案:

答案 0 :(得分:0)

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

例如,这是我在最近的一个项目中使用的东西。字段DateRange作为字符串返回,并且可以像它是&#34; base&#34;那样进行排序。字段:

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);
        }
    }
}

答案 1 :(得分:0)

如果将DateTime转换为字符串并将其格式化,则WebGrid会将列排序为字符串,这与DateTime格式列的预期结果不正确。