2012-04-29 9 views
5

Nel mio modelloerrore: L'elemento del modello passato nel dizionario è nullo, ma questo dizionario richiede un elemento del modello non nullo di tipo '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; } 

a mio avviso (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" }) 

e ottenere seguente errore

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

Che aspetto ha il controllore che sta trasmettendo il modello alla vista? –

risposta

2

provare la definizione del proprio tipo di EventDate come annullabile: DateTime?

+0

fatto ma ottenere errore di compilazione per l'utilizzo di Model.ToShortDateString() CS1061: 'System.Nullable ' non contiene una definizione per 'ToShortDateString' e nessun metodo di estensione 'ToShortDateString' accettare un primo argomento di tipo 'System.Nullable ' potrebbe essere trovato (ti manca una direttiva using o un riferimento di assembly?) – rekursed

+0

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

1

Si sta andando ad avere bisogno di utilizzare DateTime? come modello, e di gestire direttamente il valore nullo.

Su tipi nullable, si chiama .HasValue per verificare se il valore è effettivamente nullo oppure utilizzare ??. Questo è come un po 'del mio codice di installazione di Works:

// 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 è un posto comodo per iniziare a leggere su alcuni degli immobili.

+0

Grazie risolto con – rekursed

6

grazie risolto con .... solo mettendo lo script nel 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

Anche se la sua una domanda momento sbagliato, ma ho un altro approccio. È possibile creare un costruttore sul modello e inizializzare la proprietà della data con alcuni valori per consentire la data di oggi. Quindi, sul tuo metodo di azione creato dal tuo controller, puoi passare una nuova istanza del tuo modello come parametro nella dichiarazione della vista di ritorno.

Problemi correlati