ProblemaCómo obtener una clave ModelState de un elemento de una lista
Tengo una lista de campos que el usuario puede editar. Cuando se envíe el modelo, quiero verificar si estos elementos son válidos. No puedo usar las anotaciones de datos porque cada campo tiene un proceso de validación diferente que no conoceré hasta el tiempo de ejecución. Si la validación falla, utilizo el ModelState.AddModelError(string key, string error)
donde la clave es el nombre del elemento html al que desea agregar el mensaje de error. Como hay una lista de campos, el nombre que Razor genera para el elemento html es como Fields[0].DisplayName
. Mi pregunta es ¿hay algún método o una forma de obtener la clave del nombre html generado del modelo de vista?
intento de solución
He probado el método toString()
para la clave, pero sin suerte. También miré en la clase HtmlHelper
pero no vi ningún método útil.
Fragmento de código
Ver Modelo
public class CreateFieldsModel
{
public TemplateCreateFieldsModel()
{
FreeFields = new List<FieldModel>();
}
[HiddenInput(DisplayValue=false)]
public int ID { get; set; }
public IList<TemplateFieldModel> FreeFields { get; set; }
public class TemplateFieldModel
{
[Display(Name="Dispay Name")]
public string DisplayName { get; set; }
[Required]
[Display(Name="Field")]
public int FieldTypeID { get; set; }
}
}
controlador
public ActionResult CreateFields(CreateFieldsModel model)
{
if (!ModelState.IsValid)
{
//Where do I get the key from the view model?
ModelState.AddModelError(model.FreeFields[0], "Test Error");
return View(model);
}
}
Esto es bueno, pero acabo de encontrar otra publicación que envuelve esta lógica en un buen método de extensión: http://stackoverflow.com/a/12689563/1825109 – Michael12345