更改特定日期时间输入的日期时间文化信息

时间:2016-11-10 10:51:02

标签: asp.net-mvc datetime data-annotations

我几个小时都在努力 我有这个属性的模型

public DateTime ValidTo { get; set; }

我在View中以更改的格式显示此属性

@Html.TextBoxFor(m => Model.ValidTo, "{0:dd.MM.yyyy}" })

问题在我提交表单时开始, 因为属性Model.ValidTo现在具有值dd/MM/yyyy。日期和月份切换位置。它应该是MM/dd/yyyy

如何将视图中的自定义日期格式映射到模型中的日期格式?我可以在模型中设置自定义日期格式吗?我不能为整个页面设置文化,我只需要为一个模型做到这一点,或者更好地对模型中的特定日期时间属性进行设置。

有什么想法吗?

实验1 - 客户模型数据绑定器 - 不起作用

我尝试了这个答案的解决方案DisplayFormat ApplyFormatInEditMode

[DateTimeFormat(Format = "dd.MM.yyyy")]
        public DateTime ValidTo { get; set; }

 public class DateTimeFormatAttribute : ValidationAttribute
    {
        public string Format { get; set; }

        public override bool IsValid(object value)
        {
            if (value == null)
                return true;

            DateTime val;
            try
            {
                val = DateTime.ParseExact(value.ToString(), Format, null);
            }
            catch (FormatException)
            {
                return false;
            }

            //Not entirely sure it'd ever reach this, but I need a return statement in all codepaths
            return val != DateTime.MinValue;
        }
    }

但在视图中,显示默认的日期时间格式,在提交dd.MM.yyyy格式后,模型的行为相同。

2 个答案:

答案 0 :(得分:0)

尝试添加注释:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

答案 1 :(得分:0)

作为一种解决方法,我用这种方式解决了它

在模型中,将模型DateTime属性更改为string

public string ValidTo { get; set; }

在控制器中

 DateTime dateTime;
 if (!DateTime.TryParse(model.ValidTo, 
     CultureInfo.GetCultureInfo("cs-CZ"), 
     DateTimeStyles.None, out dateTime))
 {
      ModelState.AddModelError(string.Empty, "ValidTo date field is not valid.");
 }

 model.ValidTo = dateTime.ToString(); // optional, it depends on the use later

 if (ModelState.IsValid) {  ... }