EDIT: actualizar a esta pregunta MVC 2.0
Con asp.net MVC 2.0 es que hay un método existente de crear Resumen de validación que tenga sentido para los modelos que contienen colecciones? Si no puedo crear mi propio resumen de validaciónValidación Resumen de Colecciones
Modelo de ejemplo:
public class GroupDetailsViewModel
{
public string GroupName { get; set; }
public int NumberOfPeople { get; set; }
public List<Person> People{ get; set; }
}
public class Person
{
[Required(ErrorMessage = "Please enter your Email Address")]
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Please enter a valid Email Address")]
public string EmailAddress { get; set; }
[Required(ErrorMessage = "Please enter your Phone Number")]
public string Phone { get; set; }
[Required(ErrorMessage = "Please enter your First Name")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Please enter your Last Name")]
public string LastName { get; set; }
}
El resumen existente <%=Html.ValidationSummary %>
si no se introduce nada se parece a esto.
el siguiente error (s) se debe corregir antes de proceder al siguiente paso
* Por favor, introduzca su dirección de correo electrónico
* Por favor, introduzca su número de teléfono
* Por favor, introduzca su nombre de pila
* Por favor, introduzca su apellido
* Por favor, introduzca su dirección de correo electrónico
* Por favor, introduzca su número de teléfono
* Por favor, introduzca su nombre
* Por favor, introduzca su apellido
El diseño requiere de rúbricas que se insertan como esto:
el siguiente error (s) debe ser corregida antes de proceder al siguiente paso
Persona 1
* Por favor, introduzca su dirección de correo electrónico
* Por favor, introduzca su número telefónico
* Por favor, introduzca su nombre de pila
* Por favor, introduzca su apellido
Perso n 2
* Por favor, introduzca su dirección de correo electrónico
* Por favor, introduzca su número de teléfono
* Por favor, introduzca su nombre de pila
* Por favor introduzca su apellido
respuesta Sobre la base de la respuesta de Pharcyde.
public static MvcHtmlString NestedValidationSummary(this HtmlHelper helper)
{
if (helper.ViewData.ModelState.IsValid)
return MvcHtmlString.Empty;
// create datastructure to group error messages under a given key (blank key is for general errors)
var errors = new Dictionary<string,List<string>>();
foreach (KeyValuePair<string, ModelState> keyPair in helper.ViewData.ModelState)
{
foreach (ModelError error in keyPair.Value.Errors)
{
//determine the 'key' for the group in which this error belongs
var key = keyPair.Key.Split(']')[0];
if (key.Contains("People["))
key = "Person " + key.Split('[')[1];
else
key = string.Empty;
if(!errors.ContainsKey(key))
errors.Add(key,new List<string>());
//now add message using error.ErrorMessage property
errors[key].Add(error.ErrorMessage);
}
}
// generate the HTML
var ul = new TagBuilder("ul");
foreach (KeyValuePair<string, List<string>> errorPair in errors.OrderBy(p=>p.Key))
{
var li = new TagBuilder("li");
if(!string.IsNullOrEmpty(errorPair.Key))
li.InnerHtml += string.Format("<p class=\"no-bottom-margin\"><strong>{0}</strong></p>",errorPair.Key);
var innerUl = new TagBuilder("ul");
foreach (var message in errorPair.Value)
{
var innerLi = new TagBuilder("li");
innerLi.InnerHtml = message;
innerUl.InnerHtml += innerLi.ToString(TagRenderMode.Normal);
}
li.InnerHtml += innerUl.ToString(TagRenderMode.Normal);
ul.InnerHtml += li.ToString(TagRenderMode.Normal);
}
return MvcHtmlString.Create(ul.ToString(TagRenderMode.Normal));
}
Tengo toda la misma maldita pregunta. Adivina entonces la respuesta no es tanto ... – Terrance