MVC DateTime validation défaut
J'ai trouvé beaucoup de simulair questions, mais pas une bonne solution propre qui est au travail. Je vois beaucoup de code personnalisé pour l'obtention de ce travail, mais pourquoi est-ce? Si cela ne fonctionne pas depuis le début?
Ce que je trouve étrange, c'est que dans IE9, il fonctionne, mais dans Firefox et google Chrome est un échec.
À chaque fois que im essayant de Firefox ou de Chrome, j'ai le message "Le champ d'Anniversaire doit être une date".
Quand j'ai essayer le code ci-dessous dans un nouveau MVC 4 RTM projet, je ne peux pas le faire fonctionner. Je vois le type DateTime.Maintenant par défaut sous la forme jj-MM-aaaa (Hollande) dans tous les navigateurs, mais je ne peux pas soumettre dans Firefox et Chrome.
La mondialisation de la balise n'est pas défini dans le web.config donc il doit être à l'aide de la valeur par défaut. Im de la Hollande, de sorte qu'il devrait obtenir le client de la culture, je suppose.
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);
}
Balisage
<!-- 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")
}
- Désolé, mais je ne sais pas comment faire pour formater le MVC Vue ci-dessus.
Vous devez vous connecter pour publier un commentaire.
J'ai été en mesure de résoudre ce problème en modifiant le jQuery du programme de validation de fonction pour les dates:
Le problème a été jQuery validation et de la localisation. Il semble qu'il y a des fichiers de localisation pour les messages et les méthodes de l'plugin jQuery. Voir mon blog pour un détail explication du problème et comment je l'ai résolu.
http://www.locktar.nl/programming/mvc/localization-validation-in-mvc/
Edit:
Je viens de sortir un nouveau blog avec un rafraîchissement de tous les problèmes de localisation et comment résoudre le problème pour un DateTime propriété. Voir mon nouveau post MVC localisation de validation.
Non, ce n'est pas correct. Vous pourriez être parfaitement bien à partir de la Hollande et de la configuration de votre navigateur pour utiliser la culture Chinoise. La raison vous ne pouvez pas obtenir que cela fonctionne est probablement parce que, dans FF et Chrome, vous n'avez pas la bonne culture.
Puisque vous n'avez pas spécifié de la culture dans la mondialisation votre élément dans le web.config, ASP.NET MVC utiliser celui qui est envoyé à partir du navigateur dans l'entête de la requête. Par exemple, si vous configurez votre navigateur pour en-US la culture de l'en-tête suivant seront fixés le long de chaque demande:
Voici comment il est configuré dans Chrome:
Donc, assurez-vous de mettre la langue de votre choix en premier dans la liste.
Et si vous voulez un moyen fiable d'utiliser la même syntaxe que celle définie dans votre
DisplayFormat
attribut lors de la liaison de modèle que vous pourriez écrire un modèle de liaison personnalisé comme indiqué ici: https://stackoverflow.com/a/7836093/29407