c# - 输入类型日期的客户端验证不起作用

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

我有一个包含日期和日期时间字段的表单:

@Html.TextBoxFor(model => model.A, new { @type = "datetime" })
@Html.TextBoxFor(model => model.B, new { @type = "date" })

型号:

public class TestModel
{
  [DataType(DataType.Date)]
  public DateTime A {get;set;}

  [DataType(DataType.Date)]
  public DateTime B {get;set;}
}

通过使用这些输入类型,iPad 可以显示不错的日期(时间)选择器。这些字段使用客户端验证进行验证。对于日期时间字段 (A) 它有效,但日期字段 (B) 将引发错误:“请输入有效日期。”我该如何解决这个问题?

例子:

  • 日期时间的此 iPad (Safari) 值有效(根据 MVC 客户端验证):12 月 15 日。 2011 9:20
  • 此 iPad (Safari) 日期值无效:12 月 15 日。 2011

在 iPad 上很难调试代码,所以我不知道 Safari 在设置输入的值属性时如何更改日期格式。

编辑: 我发现日期时间格式是通用日期时间格式(yyyy-MM-DDTHH:mmZ),而日期格式是yyyy-MM-dd。由于本地化,客户端验证器可能确实理解通用日期时间而不是 yyyy-MM-dd

最佳答案

当我查看我在 iPhone 上开发的移动网站时,我遇到了完全相同的问题并且难以置信。下面问题中的讨论为我解决了这个问题。

https://github.com/jzaefferer/jquery-validation/issues/20 .

此外,为了以无缝方式解决这个问题,我为日期数据类型创建了以下 razor 编辑器模板:

@model DateTime?
@Html.TextBox("myDate", ViewData.Model.ToIso8601FullDate(), new { type = "date", @class = "text-box single-line" })

和一个方便的扩展方法,根据 spec for input type=date 为 html 5 日期输入类型提供一种它喜欢使用的格式。 :

public static string ToIso8601FullDate(this DateTime? d)
{
    if (!d.HasValue) return null;

    return d.Value.ToString("yyyy-MM-dd");
}

关于c# - 输入类型日期的客户端验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8516940/

相关文章:

javascript - 有效地验证页面上的数据自加载以来没有被其他人更改过?

c# - 多线程问题——向静态列表中添加一个元素

c# - 在 EF Core 2 中使用单一表名

c# - 如何确定顺序?

html - 如何设置 MVC3/ASP.net DropDownList 的样式?

asp.net-mvc-3 - MVC。 HttpPostedFileBase始终为null

c# - 模型级验证

c# - 默认构造函数创建的 `Dictionary`是否使用哈希码?

c# - 从 C# 调用 C++ 函数传递类型剥离的空指针

ruby-on-rails - 使用嵌套路由进行渲染时出错