Asp.net mvc 4 MVC4:asp.net mvc webgrid中的日期时间列排序

Asp.net mvc 4 MVC4:asp.net mvc webgrid中的日期时间列排序,asp.net-mvc-4,datetime,webgrid,Asp.net Mvc 4,Datetime,Webgrid,我一直在尝试对asp.net mvc webgrid中的日期时间列进行排序 这是我的密码: grid.Column(header: "Product Purchased Date",columnName:"PurchasedDate" canSort: true,format: @<text> @item.PurchasedDate.ToString("MM/dd/yyy")</text> grid.Column(标题:“产品购买日期”,列名称:“Pu

我一直在尝试对
asp.net mvc webgrid
中的日期时间
列进行排序

这是我的密码:

 grid.Column(header: "Product Purchased Date",columnName:"PurchasedDate" canSort: true,format: @<text>
        @item.PurchasedDate.ToString("MM/dd/yyy")</text>
grid.Column(标题:“产品购买日期”,列名称:“PurchasedDate”可排序:true,格式:@
@item.PurchasedDate.ToString(“MM/dd/yyy”)
当我尝试使用上述代码时,我遇到以下错误:

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

System.Web.Helpers.WebGrid.Column(string,string,System.Func,string,bool)”匹配的最佳重载方法有一些无效参数

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


如果我遗漏了什么,请道歉。

我建议,如果您想将其作为字符串排序,请在模型对象中添加一个函数,该函数以字符串形式返回值,而不是将其内联转换。因此,对象上会有一个字段,如PurchasedDataString

例如,这是我在最近的一个项目中使用的内容。字段
DateRange
作为字符串返回,并且可以像“基本”字段一样进行排序:


如果您将DateTime转换为字符串并对其进行格式化,WebGrid将以字符串的形式对列进行排序,这与DateTime格式列的预期结果不符。

Hai Shane感谢您的回复。在模型对象中执行排序时是否有任何更改。?Shane您的代码返回为“01-JAN”。但我需要使用此格式“01/08/2014”。C正确。当然,您可以使用String.Format()返回任何值。但是,我认为您需要显示和排序版本。您的显示版本使用2014年8月1日的格式,但排序版本为2014-01-08(年-月-日)所以你没有得到环绕效果。有什么解决办法吗?因为我必须以这种格式“01/08/2014”在UI中显示日期。是的,你指定了两个字段,按一个排序,但显示另一个。
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);
        }
    }
}