0

Je travaille sur une application Web MVC (mise à niveau de MVC4 vers MVC5) et je n'arrive pas à faire fonctionner la validation côté client. Donc, pour exclure les choses, j'ai créé une application MVC vide par défaut.MVC5 - JQuery La validation côté discret ne fonctionne pas

Malheureusement, je n'arrive toujours pas à faire fonctionner les choses, la forme de contact continue de soumettre au serveur et afterworths montrant un message d'erreur du serveur parce que le viewmodel est invalide.

Ceci est mon code;

Contact.cshtml

@model BLL.DTO.ContactDTO 
@{ 
    ViewBag.Title = "Contact"; 
} 
<h2>@ViewBag.Title.</h2> 
<h3>@ViewBag.Message</h3> 

@using (Html.BeginForm("Contact","Home", FormMethod.Post, new {id = "contactform"})) 
{ 
    @Html.LabelFor(x => x.Firstname) 
    @Html.TextBoxFor(x => x.Firstname) 
    @Html.ValidationMessageFor(x => x.Firstname) 

    <input type="submit" value="Verzenden"/> 
} 

<address> 
    One Microsoft Way<br /> 
    Redmond, WA 98052-6399<br /> 
    <abbr title="Phone">P:</abbr> 
    425.555.0100 
</address> 

<address> 
    <strong>Support:</strong> <a href="mailto:[email protected]">[email protected]</a><br/> 
    <strong>Marketing:</strong> <a href="mailto:[email protected]">[email protected]</a> 
</address> 

@*@section scripts { 
    <script type="text/javascript"> 
     $("#contactform").validate({ 
      debug: false 
     }); 
    </script>  
}*@ 

ContactDTO.cs

public class ContactDTO : BaseDTO 
{ 
    [Required (ErrorMessage = ErrorConstants.ThisFieldIsRequired)] 
    [Display(Name = "Voornaam")] 
    [MaxLength(75)] 
    public string Firstname { get; set; } 

    [Required(ErrorMessage = ErrorConstants.ThisFieldIsRequired)] 
    [Display(Name = "Achternaam")] 
    [MaxLength(75)] 
    public string Lastname { get; set; } 

    [Display(Name = "E-mail")] 
    [DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 

    [Display(Name = "Website")] 
    public string Website { get; set; } 

    [Required(ErrorMessage = ErrorConstants.ThisFieldIsRequired)] 
    [Display(Name = "Opmerkingen")] 
    [DataType(DataType.Text)] 
    public string Comments { get; set; } 
} 

BundleConfig.cs

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
        "~/Scripts/jquery.validate*")); 

bundles.Add(new ScriptBundle("~/bundles/msval").Include(
     "~/Scripts/jquery.validate.unobtrusive.js")); 

web.config

<appSettings> 
    <add key="webpages:Version" value="3.0.0.0"/> 
    <add key="webpages:Enabled" value="false"/> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
    </appSettings> 

_Layout.cshtml

@Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/bootstrap") 
    @*@Scripts.Render("~/bundles/jqueryval")*@ 
    @Scripts.Render("~/bundles/msval") 

    @RenderSection("scripts", required: false) 
</body> 

Comme vous pouvez probablement voir dans les fragments de code que j'ai aussi essayé jquery.validate.js, mais cela ne fonctionne pas soit .. Je préfère utiliser la validation discrète par défaut, mais malheureusement, il continue à soumettre le formulaire au serveur. J'ai également lu plusieurs autres sujets (this et this) et même si les problèmes semblent similaires, cela ne résout pas mon problème. Qu'est-ce que cela pourrait être ..?

+2

Vous devez valider et valider-discret. Ce qui se passe si vous n'incluez que '~/bundles/jqueryval' car son masque correspond aussi à' query.validate.unobtrusive'. Si vous incluez les deux bundles, alors avec leurs masques actuels, vous inclurez deux fois «unobtrusive». – GSerg

+0

Où est votre contrôleur? –

+0

Vous devez également nous montrer votre contrôleur pour que nous sachions si vous avez traité si le modèle passé à la vue est valide ou non. –

Répondre

0

Dans mon cas, la validation ne fonctionnait pas en raison de l'espace de noms de ma bibliothèque de classes et l'espace de noms des modèles par défaut ne correspondait pas, d'où la validation ne fonctionnait pas. Je l'ai corrigé et maintenant il fonctionne bien.