2012-04-29 18 views
5

W moim modeluBŁĄD: przekazany do słownika poz model jest zerowa, ale ten słownik wymaga niezerowym elementu modelu typu „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; } 

moim zdaniem (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> 

w shared/EditorTemplates/Date.cshtml

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

i uzyskiwanie następujący błąd

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

Jak wygląda Twój kontroler, który przekazuje model do widoku? –

Odpowiedz

2

próby definiowania typu EventDate jako zerowalne: DateTime?

+0

ale wystąpił błąd kompilacji podczas korzystania z Model.ToShortDateString() CS1061: "System.Nullable " nie zawiera definicji "ToShortDateString" ani metody rozszerzenia "ToShortDateString" akceptującej pierwszy argument typu "System.Nullable " można znaleźć (czy brakuje dyrektywy użycia lub odniesienia zespołu?) – rekursed

+0

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

1

będziesz musiał użyć DateTime? jako model, a uchwyt wartość null bezpośrednio.

W przypadku typów dopuszczalnych typu null można wywołać .HasValue, aby sprawdzić, czy wartość jest rzeczywiście pusta, lub użyć wartości ??. W ten sposób niektóre z moich kodu konfiguracji działa:

// 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 jest poręcznym miejscem, aby rozpocząć czytanie o niektórych właściwości.

+0

Dzięki rozwiązany go z – rekursed

6

dzięki rozwiązać go z .... po prostu umieszczenie skryptu w pliku ..

@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

Chociaż jej niewłaściwego czasu pytanie, ale mam inne podejście. Możesz utworzyć konstruktor w swoim modelu i zainicjować właściwość date z pewnymi wartościami, powiedzmy dzisiejszą datę. Następnie na swojej metodzie działania utwórz z kontrolera, możesz przekazać nową instancję swojego modelu jako parametr w instrukcji return view.

Powiązane problemy