Znalazłem wiele pytań symulacyjnych, ale nie było to dobre, czyste rozwiązanie, które działa. Widzę wiele niestandardowego kodu, aby to zadziałało, ale dlaczego tak jest? Czy to nie działa od początku?Walidacja sprawdzania poprawności DataTime MVC
To, co uważam za dziwne, to to, że w IE9 działa, ale w Firefoksie i Chrome to nie działa. Za każdym razem, gdy próbuję w Firefoksie lub Chrome, pojawia się komunikat "Pole Urodziny musi być datą".
Kiedy próbuję kodu poniżej w nowym projekcie MVC 4 RTM, nie mogę go uruchomić. Widzę DateTime.Now domyślnie jako dd-MM-rrrr (Holandia) we wszystkich przeglądarkach, ale nie mogę go przesłać w Firefoksie i Chrome.
Znacznik globalizacji nie jest ustawiony w pliku web.config, więc musi używać wartości domyślnej. Jestem z Holandii, więc powinienem zdobyć kulturę klienta.
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
//[DataType(DataType.Date)]
public DateTime Birthday { get; set; }
}
[AllowAnonymous]
public ActionResult Register()
{
RegisterModel vm = new RegisterModel()
{
Birthday = DateTime.Now
};
return View(vm);
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
//WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
//WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Markup
<!-- language: lang-none -->
@model DateTimeWithDatePicker.Models.RegisterModel
@{
ViewBag.Title = "Register";
}
<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>Create a new account.</h2>
</hgroup>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>Registration Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Birthday)
@Html.EditorFor(m => m.Birthday)
</li>
</ol>
<input type="submit" value="Register" />
</fieldset>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Niestety, ale nie wiem, jak sformatować MVC widok powyżej. –