我几个小时都在努力 我有这个属性的模型
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
格式后,模型的行为相同。
答案 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) { ... }