如何将短日期字符串排序为好像它是MVC 5模型中的日期?

时间:2015-08-25 17:18:10

标签: c# asp.net-mvc

我在MVC 5 C#模型中有一个映射到SQL表的字段。源数据的类型为nvarchar(10),以满足同时使用该表的其他人的需求。

在最新的迭代中,用户还希望能够按此列进行排序,这意味着我需要将其转换为日期时间值(因此可以正确排序)并显示为shortdate。

我知道我可以将这个字段设为私有并创建一个单独的公共函数,将其作为日期进行转换,但我想知道是否有一种更紧凑的方法可以在一个函数中完成所有这些操作。我四处搜寻,但没有看到我所描述的任何例子。这甚至可能吗?

换句话说,我希望将其显示为短期,但将其排序为日期。我是在正确的轨道上,还是我错过了什么?

[Required]
[StringLength(10)]        
[Display(Name = "Entry Date")]
[DisplayFormat(DataFormatString="{0:d}")]
public string EntryDate { get; set; }        

1 个答案:

答案 0 :(得分:1)

如果数据代表日期,请添加一个日期属性:

public DateTime? EntryDateValue
{
    get
    {
        DateTime dateValue;
        if (DateTime.TryParse(EntryDate, out dateValue))
            return dateValue;
        return null;
    }
    set
    {
        // parse "value" to the string format you want
        // and store it in EntryDate
    }
}

将视图绑定到该属性,根据需要使用.ToString("...")格式化输出,并允许在DateTime?而不是字符串上进行排序。基本上为应用程序代码创建一个pass-through属性,模糊后备" stringly-typed"值。

一般来说,调整文本显示的正确后备数据比调整文本显示更像是支持数据更容易。