Jak mogę poinformować kontrolera/model, jakiego rodzaju kultury powinien oczekiwać podczas analizowania datetime?Problem związany z kulturą datetime kultury MVC w programie ASP.NET podczas przekazywania wartości do kontrolera
Wykorzystałem niektóre z this post do wdrożenia datepicker jquery w mojej aplikacji mvc.
Po zgłoszeniu daty "zagubienia w tłumaczeniu" nie używam formatowania US dla daty, więc kiedy zostanie wysłany do kontrolera, staje się on pusty.
Mam formularz, w którym użytkownik wybiera datę:
@using (Html.BeginForm("List", "Meter", FormMethod.Get))
{
@Html.LabelFor(m => m.StartDate, "From:")
<div>@Html.EditorFor(m => m.StartDate)</div>
@Html.LabelFor(m => m.EndDate, "To:")
<div>@Html.EditorFor(m => m.EndDate)</div>
}
zrobiłem szablon edycji do tego, aby realizować datepicker jquery:
@model DateTime
@Html.TextBox("", Model.ToString("dd-MM-yyyy"), new { @class = "date" })
I następnie utworzyć datepicker takie widżety.
$(document).ready(function() {
$('.date').datepicker({ dateFormat: "dd-mm-yy" });
});
Wszystko to działa dobrze.
Tu zaczynają się problemy, to jest mój kontroler:
[HttpGet]
public ActionResult List(DateTime? startDate = null, DateTime? endDate = null)
{
//This is where startDate and endDate becomes null if the dates dont have the expected formatting.
}
Dlatego chciałbym jakoś powiedzieć mój kontroler co kultura powinna się spodziewać? Czy mój model jest niewłaściwy? czy mogę jakoś powiedzieć, jakiej kultury użyć, np. z atrybutami adnotacji danych?
public class MeterViewModel {
[Required]
public DateTime StartDate { get; set; }
[Required]
public DateTime EndDate { get; set; }
}
Edit: this link wyjaśnia mój problem i bardzo dobre rozwiązanie dla niego również. Dzięki gdoronowi
Zastosowanie jednego formatu dla wszystkich upraszanie. http://stackoverflow.com/a/28219557/960997 – rnofenko
@fomaa Używam teraz datepicker z [altField] (http://api.jqueryui.com/datepicker/#option-altField) i [altFormat] (http://api.jqueryui.com/datepicker/#option-altFormat) opcje dostarczenia ukrytego pola z niezmienną wersją daty kultury (jak wspominasz o ISO8601). Następnie przesyłając to pole, uważam, że jest to lepsze rozwiązanie. – FRoZeN