DisplayFormat ApplyFormatInEditModeDisplayFormat A

2019-05-12 09:26发布

我使用MVC 3在C#中,我有一个类具有这种属性

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}", ApplyFormatInEditMode = true)]

我想执行的验证当用户在EDIT MODE

在数据库中的数据存储与类型datetime此格式

  6/15/2009 1:45:30 PM

我收到此错误

错误字符串是格式不正确

我相信这个问题是在

DataFormatString = "{0:dd MMM yyyy}"

任何想法如何解决?

Answer 1:

DisplayFormat属性是字面上仅用于显示值。 如果设置ApplyFormatInEditMode在一个文本框(用于编辑)显示,当所有会做的是同样适用的格式,以您的数据的内容。 它有没有关系的验证。

如果你想用你指定你可能必须创建自己的格式,以验证输入ValidationAttribute ,并使用DateTime.ParseExact()试图以确保它符合你希望的格式。 唯一的拉回是,除非你把它写它不会有一个附带的客户端验证逻辑。

我没有thuroughly测试这一点,但它应该给你一个开始。

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")]

更新:对不起,我donn't想我清楚地读你的问题。 它在抱怨上回发数据的原因是因为你想使用的格式不是一个标准。 你可能会关闭执行共同的日期选取器的一个在线填充字段时使用,而不是让它可以手动编辑或期待这样的非标准格式更好。 自定义显示格式都能很好地显示,但如果你要使用编辑模式,默认的自定义格式DateTime.Parse不明白你必须写自己的ModelBinder的,我相信,这件事情我没有做,或者你可以在你的视图模型中的数据类型更改为字符串和自己的操作方法解析它(你仍然可以使用我在这种情况下提供的验证)。 为了摆脱你的错误的(但也将删除自定义格式编辑模式下),你就必须删除ApplyFormatInEditMode财产。



Answer 2:

0:dd MMM yyyy是要指望像一个字符串06 JUN 2009 ,而不是6/15/2009

如何获得,当你输入字符串String Not in Correct Format错误?



文章来源: DisplayFormat ApplyFormatInEditMode