Bug with asp.net mvc2, collection and ValidationMessageFor ?
- by Rafael Mueller
I'm with a really weird bug with asp.net mvc2 (rtm) and ValidationMessageFor.
The example below throws a System.Collections.Generic.KeyNotFoundException on Response.Write(Html.ValidationMessageFor(n = n[index].Name));
Any ideas why thats happening?
I'm accessing the same dictionary twice before, but it only throws the error on ValidationMessageFor, any thoughts?
Here's the code.
public class Parent
{
public IList<Child> Childrens { get; set; }
[Required]
public string Name { get; set; }
}
public class Child
{
[Required]
public string Name { get; set; }
}
The controller
public class ParentController : Controller
{
public ActionResult Create()
{
var parent = new Parent { Name = "Parent" };
parent.Childrens = new List<Child> { new Child(), new Child(), new Child() };
return View(parent);
}
}
The view (Create.aspx)
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Parent>" %>
<%@ Import Namespace="BugAspNetMVC" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%Html.EnableClientValidation(); %>
<% using (Html.BeginForm())
{%>
<%=Html.LabelFor(p => p.Name)%>
<%=Html.TextBoxFor(p => p.Name)%>
<%=Html.ValidationMessageFor(p => p.Name)%>
<%Html.RenderPartial("Childrens", Model.Childrens); %>
<%} %>
</asp:Content>
And the partial view (Childrens.ascx)
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<Child>>" %>
<%@ Import Namespace="BugAspNetMVC"%>
<%
for (int i = 0; i < Model.Count; i++)
{
var index = i;
Response.Write(Html.LabelFor(n => n[index].Name));
Response.Write(Html.TextBoxFor(n => n[index].Name));
Response.Write(Html.ValidationMessageFor(n => n[index].Name));
}
%>