2012-05-09 8 views
5

Mam operację MVC, która przyjmuje jeden z jej parametrów: DateTime i jeśli przejdę "17/07/2012", zgłasza wyjątek mówiąc, że parametr ma wartość null, ale nie może mieć wartości pustej, ale jeśli przekażę 01/07/2012, zostanie ona przeanalizowana jako Jan 07 2012.Bezpieczny sposób przekazania parametru daty do wywołania ajaxa do akcji MVC

Podaję daty wywołania ajax w formacie DD/MM/YYYY, czy mogę polegać na formacie MM/DD/YYYY pomimo skonfigurowanej kultury w web.config?

Jest to prosta metoda i jest tylko jeden parametr daty.

Odpowiedz

7

Masz trzy bezpiecznych opcji Send date parametru w ASP.NET-MVC:

  • wysłać go jako YYYY/MM/DD jest to standard ISO dla dat międzynarodowych.
  • Użyj żądania POST zamiast żądania .

  • Jeśli chcesz zmienić sposób domyślny Model Binder wiąże terminach:

Można zmienić spoiwo domyślnego modelu korzystania z kultury obsługi za pomocą 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;  
    } 
} 

A w globalnej .Asax napisz:

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

Czytaj więcej na this excellent blog opisujące, dlaczego zespół odpowiedzialny za framework MVC zaimplementował domyślną kulturę dla wszystkich użytkowników.

1

Odpowiedź gdorona jest poprawna w przypadku podania daty jako zapytania. Jeśli jednak są one przekazywane jako wartości w formie (wartości po wartościach), wówczas należy użyć poprawnej kultury (zakładając, że kultura jest skonfigurowana jako właściwość).

Powiązane problemy