J'ai utilisé stackoverflow plusieurs fois pour résoudre mes problèmes (liés au code!) Mais c'est la première fois que j'ai besoin de poster une question parce que je ne peux pas m'entraîner Qu'est-ce qui ne va pas.Validation côté client de la liste dans ASP.Net MVC 2
Quand activer la validation du côté client sur une vue qui permet de modifier une collection d'objets qui utilisent DataAnnotations pour validation, l'exception suivante est soulevée:
[KeyNotFoundException: The given key was not present in the dictionary.]
System.Collections.Generic.SortedDictionary`2.get_Item(TKey key) +6129977
System.Web.Mvc.Html.ValidationExtensions.ValidationMessageHelper(HtmlHelper htmlHelper, ModelMetadata modelMetadata, String expression, String validationMessage, IDictionary`2 htmlAttributes) +840
System.Web.Mvc.Html.ValidationExtensions.ValidationMessageFor(HtmlHelper`1 htmlHelper, Expression`1 expression, String validationMessage, IDictionary`2 htmlAttributes) +138
System.Web.Mvc.Html.ValidationExtensions.ValidationMessageFor(HtmlHelper`1 htmlHelper, Expression`1 expression) +106
ASP.views_test_test_aspx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in d:\SVN\Discover2 - trunk\Discover2.Web\Views\Test\Test.aspx:18
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +109
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8
System.Web.UI.Page.Render(HtmlTextWriter writer) +29
System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +56
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3060
Line 18: <%: Html.ValidationMessageFor(m => Model[i].Name)%>
Si je supprime l'appel <% Html.EnableClientValidation(); %>
aucune exception est soulevée et La validation côté serveur fonctionne comme prévu.
Voici mon test Modèle:
public class Dog {
[Required]
public string Name { get; set; }
}
et vue:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IList<Discover2.Web.Controllers.Dog>>" %>
<% Html.EnableClientValidation(); %>
<%using (Html.BeginForm()) { %>
<%for (int i = 0; i < Model.Count(); i++) {%>
<div>
<%: Html.LabelFor(m => Model[i].Name) %>
<%: Html.TextBoxFor(m => Model[i].Name)%>
<%: Html.ValidationMessageFor(m => Model[i].Name)%>
</div>
<%} %>
<button type=submit>Save</button>
Toutes les idées sur la façon d'obtenir ce travail serait apprécié comme fais ma tête en essayant d'obtenir ça fonctionne !!!
Merci
Merci pour cela, mais pas de joie là-bas. J'ai essayé de changer le nom de la propriété à DogsName après votre suggestion sur les noms, mais cela n'a pas fonctionné non plus. Ensuite essayé Html.ValidationMessage (String.Format ("Modèle [{0}]. DogsName", i.ToString())) qui n'a pas déclenché l'erreur mais aucun message de validation n'a été affiché, puis a essayé de supprimer Model Html.ValidationMessage (String.Format ("[{0}]. DogsName", i.ToString())) et l'exception d'origine est à nouveau levée! Je suppose que cela nous montre ce que fait MVC mais ne m'aide pas à trouver une réponse !! D'autres idées? – Andy