Gib*_*boK 1 c# asp.net asp.net-mvc-3
我在C#中使用MVC 3,我有一个具有此属性的类
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}", ApplyFormatInEditMode = true)]
Run Code Online (Sandbox Code Playgroud)
我希望在用户进入时执行验证 EDIT MODE
数据库中的数据以类似datetime
格式存储的类型存储
6/15/2009 1:45:30 PM
Run Code Online (Sandbox Code Playgroud)
我收到此错误错误字符串格式不正确
我相信问题在于
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后只是使用它的问题.
[DateTimeFormat(Format = "dd MMM yyyy")]
更新:对不起我不认为我清楚地看到你的问题.它抱怨回发数据的原因是因为您尝试使用的格式不是标准格式.你可能最好在网上实现一个常用日期选择器,以便在填充字段时使用,而不是让它进行手工编辑或期望像这样的非标准格式.自定义显示格式非常适合显示,但如果要使用自定义格式进行编辑模式,则默认显示格式DateTime.Parse
不明白你必须编写自己的ModelBinder我相信,这是我没有做过的事情,或者你可以将viewmodel上的数据类型更改为string并在action方法中自己解析它(你仍然可以使用我在这种情况下提供的验证器).要摆脱错误(但在编辑模式下也会删除自定义格式),您必须删除该ApplyFormatInEditMode
属性.