【问题标题】:Display date as Month/Year but validate and save as full date mm/dd/yyyy将日期显示为月/年,但验证并保存为完整日期 mm/dd/yyyy
【发布时间】:2015-05-07 12:26:37
【问题描述】:

我有一个以标准 DateTime 格式存储在数据库中的日期。我得到了值,并在表单域中显示为 mm/yyyy。我的部分视图通过以下方式显示:

@Html.TextBoxFor(model => model.opinionDate, new { @Value = Model.opinionDate.ToString("MM/yyyy"), @readonly = "readonly" })

我已将 bootstrap-datepicker 连接到日期字段。设置为只允许选择月份和年份。

我的 jQuery 模型验证失败,因为它看起来不像日期。如何验证此值?我可以在验证发生之前修改值(添加当天的 01)吗?

【问题讨论】:

    标签: c# jquery model-view-controller model bootstrap-datepicker


    【解决方案1】:

    由于您的字段是只读的并且日期选择器已经为您提供了您想要的值,也许您可​​以根本不验证该字段或将其验证为字符串。然后,如果您需要额外的验证层,请在控制器中进行。查看validating dates 的文档。如果您验证为字符串,您可以快速检查以确保您有适当数量的字符:

    $( "#myform" ).validate({  
        rules: {    
            opinionDate: {      
                required: true,
                rangelength: [4, 5]    
                   }  
               }});
    

    这会检查字符串的长度是否在 4-5 个字符之间(“1/15”或“01/15”)。希望这会有所帮助!

    【讨论】:

    • 我得到一个错误,显然是在我的模型中,因为我试图读取一个 DateTime 值,但像字符串一样使用它。无法将“System.DateTime”类型的对象转换为“System.String”类型
    • 我想这是有道理的。您有几个选项可以将该字符串转换为日期时间。在您的控制器中,您可以根据文档here 使用 DateTime dt = Convert.ToDateTime(date) 之类的东西将日期的日期部分连接为占位符并将其转换为字符串
    • 您也可以在模型中实现这一点:public string date_from_view { get; set;} 存储字符串,public DateTime date { get { return Convert.ToDateTime("01/" + date_from_view); }} 将字符串转换为日期时间并存储它
    【解决方案2】:

    我能够通过我的控制器解析进出数据库的值来解决它。我的模型将值视为字符串。到目前为止,一切都很好。我无法在上面进行验证,但我可以稍后处理。由于这是一个 Intranet 应用程序,因此现在使用日期选择器足以获得一个干净的日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-16
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多