【问题标题】:datetime.tryparse always return falsedatetime.tryparse 总是返回 false
【发布时间】:2021-03-02 09:34:28
【问题描述】:

我正在学习 asp.net 的课程,并且我是 c# 的新手

我创建了一个包含日期输入字段的表单,它总是返回 无效消息 以下是输入代码:

    <div class="form-group">
        @Html.LabelFor(m => m.Date)
        @Html.TextBoxFor(m => m.Date, new { @class = "form-control",placeholder="eg 1 Jan 2015" })
        @Html.ValidationMessageFor(m => m.Date)
    </div>

这是我为该输入字段创建的模型属性:

[Required]
[FutureDate]
public string Date { get; set; }

这是发生问题的futuredate数据注释的代码:

public class FutureDate : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            DateTime dateTime;
            var isValid = DateTime.TryParseExact(Convert.ToString(value),
                "d MMM YYYY",
                CultureInfo.CurrentCulture,
                DateTimeStyles.None,out dateTime);
            return (isValid && dateTime > DateTime.Now);

        }
    }

虽然我在调试时注意到 datetime 变量没有更新 使用输入字段值并返回 {01/01/0001 12:00:00}

【问题讨论】:

  • 而您尝试解析的日期正是"eg 1 Jan 2015"?
  • @Charlieface 日期是“2030 年 11 月 1 日”

标签: c# asp.net-mvc entity-framework data-annotations


【解决方案1】:

年份说明符是小写的。参考docs

var isValid = DateTime.TryParseExact(Convert.ToString(value),
            "d MMM yyyy",
            CultureInfo.CurrentCulture,
            DateTimeStyles.None,out dateTime);

工作示例:https://dotnetfiddle.net/BCQdJr

对比非工作:https://dotnetfiddle.net/DIx7Jn

【讨论】:

  • yyyy改小写后验证错误依然存在
  • 请仔细检查您的输入,即:Convert.ToString(value) 返回的值是什么?这个 sn-p 有效。没有错误,它为“2030 年 1 月 1 日”返回 true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 2021-11-05
  • 2018-11-05
  • 2019-05-06
  • 2017-04-29
  • 2013-04-30
  • 2015-01-20
相关资源
最近更新 更多