错误:传递到字典中的模型项为空,但此字典需要类型为“System.DateTime”的非空模型项

本文关键字:模型 字典 类型 System DateTime 错误 | 更新日期: 2023-09-27 18:32:48

在我的模型中

[DataType(DataType.Date)]
    [Display(Name="Event Date")]
    [DisplayFormat(DataFormatString = "{0:d}")]
    //[DisplayFormat(ApplyFormatInEditMode=true ,DataFormatString="{0:DD/MM/YYYY}")]
    public DateTime EventDate { get; set; }

在我的视图中 (Create.cshtml)

<div class="editor-label">
        @Html.LabelFor(model => model.EventDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.EventDate)
        @Html.ValidationMessageFor(model => model.EventDate)
    </div>

in Shared/EditorTemplates/Date.cshtml

@model DateTime
@Html.TextBox("", String.Format("{0:d}", Model.ToShortDateString()),
  new { @class = "datefield", type = "date" })

并收到以下错误

The model item passed into the dictionary is null, but this dictionary requires a non-null model item of type 'System.DateTime'.

错误:传递到字典中的模型项为空,但此字典需要类型为“System.DateTime”的非空模型项

谢谢 解决了....只需将脚本放在文件中即可。

@model Nullable<DateTime>

@{
     DateTime dt = DateTime.Now;
 if (Model != null)
 {
     dt = (System.DateTime)Model;
 }
@Html.TextBox("", String.Format("{0:d}", dt.ToShortDateString()), new { @class = "datefield", type = "date" })
} 
<script type='text/javascript'>
    $(document).ready(function () {
        $(".datefield").datepicker({
            //      buttonImage: "/content/images/calendar.gif",
            //      showOn: "both",
            //      defaultDate: $("#calendar-inline").attr('rel')
            showAnim: 'slideDown',
            dateFormat: 'dd/mm/yy'
        });
    });
</script>

尝试将EventDate定义为可为空的类型:DateTime?

您需要

使用 DateTime? 作为模型,并直接处理 null 值。

在可为 null 的类型上,调用 .HasValue 以查看该值是否实际为 null,或使用 ?? 。 这是我的一些设置代码的工作方式:

// get the date the editor will work with, or use today's date if it is null
DateTime workingDate = if (Model.HasValue) ? Model.Value : DateTime.Now;
// check the model metadata to see if the underlying model type was nullable or not
bool isNullable = ViewData.ModelMetadata.IsNullableValueType;
// get the min date passed in as optional params.  default to some reasonable timeframe
var minDate = ViewBag.MinDate ?? DateTime.Now.AddDays(-30)
// now start drawing the editor

这篇博文是开始阅读一些属性的方便地方。

虽然这是一个错误的时间问题,但我有另一种方法。您可以在模型上创建一个构造函数,并使用一些值(例如今天的日期)初始化日期属性。然后,在从控制器创建的操作方法上,可以将模型的新实例作为返回视图语句的参数传递。

相关文章: