0

J'utilise une validation côté client discrète pour mon application actuelle, mais le problème est qu'elle ne valide pas tous les champs, mais uniquement certains d'entre eux. D'abord je pensais que DropDownLists étaient ceux qui étaient omis par le validateur, mais après avoir changé ceux pour de simples TextBox, j'ai réalisé que ça ne fonctionnait pas non plus. Je ne sais vraiment pas ce que c'est. Alors, je l'espère, vous pouvez me donner un coup de main:Aide sur la validation côté client ASP.NET MVC3

Je l'ai déjà sur mon web.config:

<appSettings> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings> 

Je les métadonnées pour l'une des classes qui ne fonctionne pas correctement:

[MetadataType(typeof(QuestionMetadata))] 
public partial class Question 
{ 
    [Bind(Exclude = "Id")] 
    public class QuestionMetadata 
    { 
     [Required] 
     public string Text { get; set; } 

     [Required] 
     [DisplayName("Question Type")] 
     public int QuestionType_Id { get; set; } 

     [Required] 
     [DisplayName("Category")] 
     public int Category_Id { get; set; } 

     [Required] 
     [Range(1,Int32.MaxValue)] 
     public int SortOrder { get; set; } 
    } 
} 

Enfin, le VIEWCODE: (fortement typées et reçoit le ViewModel)

<asp:Content ID="Content2" ContentPlaceHolderID="JsContent" runat="server"> 
    <script src="<%: Url.Content("~/Scripts/jquery.validate.min.js") %>" type="text/javascript"></script> 
    <script src="<%: Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js") %>" type="text/javascript"></script> 
    <script src="<%: Url.Content("~/Scripts/question-views.js") %>" type="text/javascript"></script> 
</asp:Content> 

<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server"> 
<h2 class="path"><%= ViewRes.Question.Create.PathCreate %></h2> 

    <% using (Html.BeginForm()) { %> 
     <%: Html.ValidationSummary(true) %> 
      <div> 
       <%: ViewRes.Question.Create.DropDownQuestionnaires %> 
       <%: Html.DropDownList("Questionnaire_Id", Model.questionnairesList, "--Select--")%> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.question.Category_Id)%> 
      </div>    
      <div class="editor-field"> 
       <%: Html.DropDownListFor(model => model.question.Category_Id, Model.categoriesList, "--Select--")%> 
       <%: Html.ValidationMessageFor(model => model.question.Category_Id)%> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.question.QuestionType_Id)%> 
      </div> 
      <div class="editor-field"> 
       <%: Html.DropDownListFor(model => model.question.QuestionType_Id, Model.questionsTypeList, "--Select--")%> 
       <%: Html.ValidationMessageFor(model => model.question.QuestionType_Id)%> 
      </div> 

      <div class="editor-field"> 
       <%: Html.EditorFor(model => model.question.Text)%> 
      </div>    

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.question.SortOrder)%> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.question.SortOrder)%> 
       <%: Html.ValidationMessageFor(model => model.question.SortOrder)%> 
      </div> 

      <p> 
       <input type="submit" value="<%: ViewRes.Shared.CreateButton %>" /> 
      </p> 
    <% } %> 

</asp:Content> 

Merci pour toute aide.

+0

code généré pour les champs ne valide pas correctement: '

\t
recueil HSC –

+0

\t
code généré pour les champs ne validant pas correctement: 'code'
\t
\t

+0

Il semble que Question et Category ne valident * pas *, correct (je pensais que vous avez dit ailleurs que l'on valide ... Voici ce qui devrait être généré pour select (requis et numérique): 0 "CourseID" id = "CourseID" data-val-required = "Le champ CourseID est obligatoire." Data-val-number = "Le champ CourseID doit être un nombre." Data-val = "true" class = "input- validation-error "> Votre classe Question est partielle ... ceci suppose que vous avez un autre fichier (probablement généré par EF) qui a les mêmes valeurs que votre classe de métadonnées. .. – Felix

Répondre

0

Avez-vous essayé de rendre vos propriétés nulles? public int? Category_Id { get; set; }

+0

Comment ça se fait? Je ne comprends pas comment cela pourrait aider. En tout cas, j'ai essayé et rien ne s'est passé ... D'autres idées? –

+0

J'ai eu le problème où si je ne le rend pas nul il publie un 0 pour l'int afin que le validateur requis ne s'éteigne jamais, car il obtient toujours une valeur. – bmosh

+0

Puisque vous utilisez un javascript discret, avez-vous inclus le fichier jquery.validate.unobtrusive.min.js? – bmosh

0

Est-ce que vous insérez un script Jquery de base dans votre mise en page? Vous pouvez également utiliser Firebug pour voir s'il y a une erreur de script qui se lève pendant la validation. Vous pouvez également utiliser Firebug.

+0

Oui, je l'ai inséré the Master Page Autres suggestions –

0

Jetez un oeil à HTML qui est généré. Pour tous les domaines qui feront l'objet de validation côté client, vous verrez quelque chose comme

<input class="text-box single-line" data-val="true" data-val-required="The Text field is required." id="Text" name="Text" type="text" value="blah-blah" /&gt; 
<span class="field-validation-valid" data-valmsg-for="Text" data-valmsg-replace="true"></span> 

Ensuite, il est plus facile de résoudre: le problème est que le code de validation n'est pas généré, ou que la validation ne se produit pas, ou (comme serait dans votre exemple avec le champ de texte, la validation ne arriver, mais vous n'avez pas Html.ValidationMessage(), si l'erreur ne se présente jamais ...

+0

Hé! J'utilise Html.ValidationMessageFor() .Cela fonctionne pour la plupart des champs mais parfois ce n'est pas le cas.Le code HTML ne génère pas correctement comme vous l'avez dit, mais pourquoi? ne sait pas ... –

+0

pouvez-vous mettre plus de détails? pour le code qui n'est pas généré correctement - quel code * est * généré? Que possédez-vous pour cet élément dans la classe de modèle (quels attributs dataannotations)? – Felix

+0

J'ai déjà posté le code généré ainsi que le modèle de validation. –

Questions connexes