2012-05-09 12 views
5

Ho un'azione MVC che prende uno dei suoi parametri a DateTime e se passo "17/07/2012" genera un'eccezione dicendo che il param è nullo ma non può avere un valore nullo ma se passo 01/07/2012 viene analizzato come Jan 07 2012.Un modo sicuro per passare un parametro data a una chiamata Ajax a un'azione MVC

Sto passando le date alla chiamata Ajax nel formato DD/MM/YYYY, dovrei fare affidamento sul formato MM/DD/YYYY nonostante la cultura configurata in web.config?

Questo è un metodo semplice e c'è solo questo parametro di una data.

risposta

7

avete ottenuto tre opzioni di sicurezza per inviare parametro della data in Asp.NET-MVC:

  • inviarlo come YYYY/MM/DD è lo standard ISO per le date internazionali.
  • Utilizzare la richiesta POST anziché GET.

  • Se si desidera cambiare il modo in cui il valore di default Model Binder lega date:

è possibile modificare il legante modello predefinito per utilizzare la cultura dell'utente utilizzando IModelBinder

public class DateTimeBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     var date = value.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture); 

     return date;  
    } 
} 

E nel Global .Asax scrivere:

ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder()); 
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder()); 

Ulteriori informazioni allo this excellent blog che descrivono perché il team del framework Mvc ha implementato una cultura predefinita per tutti gli utenti.

1

La risposta di gdoron è corretta per il passaggio delle date come querystrings. Se vengono passati come valori di forma, tuttavia (valori di post), è necessario utilizzare la cultura corretta (presupponendo che la cultura sia configurata come proprietà).

Problemi correlati