替代解决方案 - 仅查看模型类
Darin 的解决方案当然是有效的,但它不是您唯一可以使用的解决方案。它需要您编写比我将在此处向您展示的解决方案更复杂的代码。
所以这是一个替代方案。我建议您不要创建自定义模型绑定器,而是创建一个单独的视图模型类,而不是DateTime
采用string
您可以根据需要设置为复杂验证正则表达式的位置。然后有一个方法可以将其转换为您的应用程序/域模型类实例(并返回)。
// suppose this app model
public class User
{
[Required]
public string Name { get; set; }
[Required]
public DateTime DateOfBirth { get; set; }
}
public class ViewUser
{
[Required]
public string Name { get; set; }
[Required]
[RegularExpression("\d{4}-\d{2}-\d{2}(?:\s\d{1,2}:\d{2}:\d{2})?")]
public string DateOfBirth { get; set; }
public ViewUser(User user)
{
this.Name = user.Name;
this.DateOfBirth = user.DateOfBirth.ToString("yyyy-MM-dd H:mm:ss");
}
public User ToPoco()
{
return new User {
Name = this.Name,
DateOfBirth = DateTime.Parse(this.DateOfBirth, "yyyy-MM-dd H:mm:ss")
};
}
}
通过一些调整,您可以ViewUser
从User
类继承并使用new
关键字 onDateOfBirth
并使用base
属性来存储正确的类型值。在这种情况下,您将不需要该ToPoco
方法。
注意:您将不得不使用DateTime.TryParseExact
方法来解析您的日期,因为它们可能包含时间,也可能不包含时间。我没有在我的代码中包含它,因为它取决于您的日期输入的确切要求。