Como obter uma chave ModelState de um item em uma lista
Problema
Eu tenho uma lista de campos que o usuário pode editar. Quando o modelo é enviado, quero verificar se esses itens são válidos. Eu não posso usar notações de dados porque cada campo tem um processo de validação diferente que eu não conhecerei até o tempo de execução. Se a validação falhar eu uso oModelState.AddModelError(string key, string error)
onde a chave é o nome do elemento html que você deseja adicionar a mensagem de erro. Como há uma lista de campos, o nome que o Razor gera para o item html é comoFields[0].DisplayName
. Minha pergunta é que existe um método ou uma maneira de obter a chave do nome html gerado a partir do modelo de visualização?
Tentativa de Solução
Eu tentei otoString()
método para a chave sem sorte. Eu também olhei através doHtmlHelper
classe, mas eu não vi nenhum método útil.
Fragmento de código
Visualizar 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);
}
}