2012-04-29 27 views
5

En mi modeloERROR: El elemento de modelo pasado en el diccionario es nulo, pero este diccionario requiere un elemento de modelo no nulo del 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; } 

en mi opinión (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> 

en Común/EditorTemplates/Date.cshtml

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

y conseguir siguiente error

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

¿Qué aspecto tiene su controlador que está pasando el modelo a la vista? –

Respuesta

2

intentan definir su tipo de EventDate como anulable: DateTime?

+0

pero obteniendo un error de compilación para usar Model.ToShortDateString() CS1061: 'System.Nullable ' no contiene una definición para 'ToShortDateString' y ningún método de extensión 'ToShortDateString' acepta un primer argumento de tipo Se pudo encontrar 'System.Nullable ' (¿falta una directiva using o una referencia de ensamblado?) – rekursed

+0

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

1

Usted va a necesitar usar DateTime? como el modelo, y manejar el valor nulo directamente.

En tipos anulables, llame al .HasValue para ver si el valor es realmente nulo, o use ??. Así es como algunos de mi código de instalación de 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 es un lugar práctico para comenzar a leer sobre algunas de las propiedades.

+0

Gracias solucionado con – rekursed

6

gracias Resuelto con .... sólo poner el script en el archivo ..

@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

Aunque su una pregunta momento equivocado, pero tengo otro enfoque. Puede crear un constructor en su modelo e inicializar la propiedad de fecha con algunos valores, digamos la fecha de hoy. Luego, en su método de acción crear desde su controlador, puede pasar una nueva instancia de su modelo como un parámetro en la declaración de vista de retorno.

Cuestiones relacionadas