DisplayFormat ApplyFormatInEditMode
我在C#中使用MVC 3,我有一个具有此属性的类
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}", ApplyFormatInEditMode = true)]
当用户处于EDIT MODE
时,我想强制执行validation
数据库中的数据以类型为datetime
格式存储
6/15/2009 1:45:30 PM
我收到此错误错误字符串格式不正确
我相信问题在于
DataFormatString =“{0:dd MMM yyyy}”
任何想法如何解决它?
DisplayFormat
属性实际上仅用于显示值。 如果设置ApplyFormatInEditMode
它所做的只是在文本框(用于编辑)中显示时将格式应用于数据内容。 它与validation无关。
如果要使用您指定的格式validation输入,则可能必须创建自己的ValidationAttribute
,并使用DateTime.ParseExact()
来尝试确保它符合您期望的格式。 除非您编写它,否则唯一的缺点就是它没有伴随的客户端validation逻辑。
我没有彻底测试过这个,但它应该给你一个开始。
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
不明白您必须编写自己的ModelBinder我相信,这是我没做过的事情或者,您可以将viewmodel上的数据类型更改为字符串,并在操作方法中自行解析(您仍然可以使用我在此情况下提供的validation程序)。 要摆脱错误(但在编辑模式下也会删除自定义格式),您必须删除ApplyFormatInEditMode
属性。
0:dd MMM yyyy
将会期待像06 JUN 2009
而不是6/15/2009
这样的字符串。
在获取String Not in Correct Format
错误时,如何输入字符串?