2012-04-29 28 views
5

Trong mô hìnhLỖI: Mô hình mục đã qua vào từ điển là null, nhưng từ điển này đòi hỏi phải có một mục mô hình không null của loại 'System.DateTime'

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

tôi trong quan điểm của tôi (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> 

trong Shared/EditorTemplates/Date.cshtml

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

và nhận được lỗi sau

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

Trình điều khiển của bạn trông như thế nào đang truyền mô hình đến chế độ xem? –

Trả lời

2

thử xác định Loại EventDate như nullable của bạn: DateTime?

+0

đã làm nhưng gặp phải lỗi biên dịch khi sử dụng Model.ToShortDateString() CS1061: 'System.Nullable ' không chứa định nghĩa 'ToShortDateString' và không có phương thức mở rộng 'ToShortDateString' chấp nhận đối số đầu tiên của loại 'System.Nullable ' có thể được tìm thấy (bạn đang thiếu một chỉ thị bằng cách sử dụng hoặc một tham chiếu lắp ráp?) – rekursed

+0

'if (Model.HasValue) Model.Value.ToShortDateString()' –

1

Bạn sẽ cần phải sử dụng DateTime? như mô hình, và xử lý các giá trị null trực tiếp.

Trên các loại có thể vô hiệu, bạn gọi .HasValue để xem liệu giá trị có thực sự là không hoặc sử dụng ??. Đây là cách một số mã thiết lập của tôi hoạt động:

// 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 

This blog post là một nơi thuận tiện để bắt đầu đọc về một số thuộc tính.

+0

Cảm ơn đã giải quyết nó với – rekursed

6

nhờ Giải quyết nó với .... chỉ cần đặt các script trong file ..

@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> 
0

Mặc dù một câu hỏi sai thời điểm của nó nhưng tôi có cách tiếp cận khác. Bạn có thể tạo một hàm tạo trên mô hình của bạn và khởi tạo thuộc tính ngày tháng với một số giá trị cho phép nói ngày đến. Sau đó, trên phương thức hành động của bạn tạo ra từ bộ điều khiển của bạn, bạn có thể vượt qua một thể hiện mới của mô hình của bạn như một tham số trên câu lệnh xem trả về.

Các vấn đề liên quan