我在 C# 中使用 MVC 3,我有一个具有此属性的类
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}", ApplyFormatInEditMode = true)]
我想在用户处于状态时强制执行验证EDIT MODE
数据库中的数据按类型存储datetime
像这样格式化
6/15/2009 1:45:30 PM
我收到此错误
错误字符串的格式不正确
我相信问题出在
DataFormatString = "{0:dd MMM yyyy}"
知道如何修复它吗?
The DisplayFormat
属性实际上仅用于显示值。如果您设置ApplyFormatInEditMode
它所做的就是将格式应用于显示在文本框中的数据内容(用于编辑)。这与验证无关。
如果您想使用您指定的格式验证输入,您可能必须创建自己的格式ValidationAttribute
,并使用DateTime.ParseExact()
尝试确保它符合您期望的格式。唯一的缺点是它不会有附带的客户端验证逻辑,除非您编写它。
我还没有对此进行彻底测试,但它应该可以给您一个开始。
public class DateTimeFormatAttribute : ValidationAttribute
{
public int 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;
}
}
然后就只是使用它的问题了。[DateTimeFormat(Format = "dd MMM yyyy")]
UPDATE:抱歉,我认为我没有清楚地阅读你的问题。它抱怨回发数据的原因是因为您尝试使用的格式不是标准格式。您可能最好在线实现一种常见的日期选择器,以便在填充字段时使用,而不是手动编辑它或期望像这样的非标准格式。自定义显示格式非常适合显示,但如果您想使用自定义格式进行编辑模式,则默认DateTime.Parse
不明白你必须编写自己的 ModelBinder 我相信,这是我没有做过的事情,或者你可以将视图模型上的数据类型更改为字符串并在操作方法中自己解析它(你仍然可以使用我在本例中提供的验证器)。要消除错误(但也会在编辑模式下删除自定义格式),您必须删除ApplyFormatInEditMode
财产。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)