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.
code généré pour les champs ne valide pas correctement: '
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