c# - 显示格式 ApplyFormatInEditMode

标签 c# asp.net asp.net-mvc-3

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

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

我想在用户处于 EDIT MODE 时执行验证

数据库中的数据以 datetime 类型存储,格式如下

  6/15/2009 1:45:30 PM

我收到这个错误

Error String is not in correct format

我认为问题出在

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 不理解的自定义格式进行编辑模式,我相信您必须编写自己的 ModelBinder,并且那是我没有做的事情,或者您可以将 View 模型上的数据类型更改为字符串并在操作方法中自行解析它(您仍然可以使用我在这种情况下提供的验证器)。要消除错误(但在编辑模式下也会删除自定义格式),您必须删除 ApplyFormatInEditMode 属性。

关于c# - 显示格式 ApplyFormatInEditMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13253964/

相关文章:

javascript - 检查 ViewBag 值是否为 null

c# - 如何限制用户可以在文本框中输入的字符数?

c# - MVC IdentityServer Db 空用户表/错误播种

c# - C# 中来自 URL 的顶级域

c# - 从代码隐藏更改母版页中的控件属性后出现问题

asp.net-mvc - 如何将变量传递给 ASP.NET MVC 应用程序中的自定义 ActionFilter

c# - 删除客户记录时删除 ASP.NET 用户帐户?

c# - 使用自动映射器时无法从 'System.Collections.Generic.IEnumerable<x>' 转换为 'x'

c# - 写入 CSV 然后保存或编辑

c# - 每个 Asp.net 回发中的 JQuery BlockUI 进度指示器