我在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}"
任何想法如何修复?
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")]
更新:对不起,我不认为我清楚地读了您的问题。之所以抱怨寄回的数据是因为您要使用的格式不是标准的格式。您最好在填充该字段时在线使用的常见日期选择器之一,而不是让其被手工编辑或期望这样的非标准格式。自定义显示格式非常适合显示,但是如果您想对默认的DateTime.Parse
不了解的编辑模式进行自定义格式您可以将视图模型上的数据类型更改为字符串,并在操作方法中自己解析(您仍然可以使用我在这种情况下提供的验证器)。要摆脱错误(但在编辑模式下也将删除自定义格式),您必须删除ApplyFormatInEditMode
属性。
0:dd MMM yyyy
将期望像 06 JUN 2009
而不是 6/15/2009
这样的字符串。
获得String Not in Correct Format
错误时如何输入字符串?