Mam małą aplikację MVC2 wyświetlaną w dwóch kulturach: en-US i es-MX. Jedna porcja zawiera dane wejściowe użytkownika dla daty wstępnie wypełnionej bieżącą datą w modelu.Sprawdzanie poprawności modelu ASP.NET MVC2 nie działa w formacie daty innej niż amerykańska
Podczas korzystania z en-US pole daty jest wyświetlane jako MM/dd/rrrr i można je zmienić w tym samym formacie bez powodowania błędów sprawdzania poprawności.
Podczas korzystania ES-MX, pole data jest wyświetlana jako dd/mm/rrrr, ale gdy data jest edytowany w tym formacie, walidację po stronie serwera nie powiedzie się z komunikatem:
Wartość "17/05/1991" nie jest ważne dla daty.
Jedną z pierwszych rzeczy, które wyskakuje na mnie o tej wiadomości jest to, że nie jest zlokalizowane. Zarówno sama wiadomość (której nie uważam za możliwą do kontrolowania), jak i wyświetlana nazwa pola (którą mogę kontrolować i jest zlokalizowana w moim kodzie). Powinien być wyświetlany w zlokalizowanym formacie.
Próbowałem przejść przez kod, aby zobaczyć dokładnie, gdzie walidacja się nie udaje, ale wydaje się, że dzieje się to w obrębie niektórych skompilowanych kodów MVC lub DataAnnotations, których nie widzę.
Nakładanie: IIS6, ASP.NET 3.5 (C#), MVC 2 RTM
Przykładowy model Kod:
public class TestVieModel{
[LocalizedDisplayNameDisplayName("TheDateDisplayName", NameResourceType=typeof(Resources.Model.TestViewModel))]
[Required(ErrorMessageResourceName="TheDateValidationMessageRequired", ErrorMessageResourceType=typeof(Resources.Model.TestViewModel))]
[DataType(DataType.Date)]
public DateTime TheDate { get; set; }
}
Przykładowy Kontroler Akcja Kod:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(TestViewModel model) {
if(ModelState.IsValid) { // <--- Always is false when using es-MX and a date foramtted as dd/MM/yyyy.
// Do other stuff
return this.View("Complete", model);
}
// Validation failed, redisplay the form.
return this.View("Enter", model);
}
Sample View Code :
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<HispanicSweeps.Web.Model.LosMets.EnterViewModel>" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Test</title>
</head>
<body>
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.TheDate) %>
</div>
<div class="editor-field">
<%= Html.EditorFor(model => model.TheDate) %>
<%= Html.ValidationMessageFor(model => model.TheDate) %>
</div>
<p><input type="submit" value="Save" /></p>
</fieldset>
<% } %>
</body>
</html>