Desejo obter todas as mensagens de erro do modelState sem conhecer os valores-chave. Fazendo um loop para pegar todas as mensagens de erro que o ModelState contém.
Como posso fazer isso?
asp.net-mvc
modelstate
chobo2
fonte
fonte
@Html.ValidationSummary()
é uma maneira rápida de exibi-los todos com navalha.foreach (var error in ViewData.ModelState.Values.SelectMany(modelState => modelState.Errors)) { DoSomething(error); }
Respostas:
Consulte também Como obtenho a coleção de erros de estado do modelo no ASP.NET MVC? .
fonte
Value.ErrorMessage
eValue.Exception.Message
foreach (KeyValuePair<string, ModelState> kvp in htmlHelper.ViewData.ModelState) {
e inserir esta linha abaixo dela:var modelState = kvp.Value;
. Você pode obter a chavekvp.Key
Usando LINQ :
fonte
List<string> errors = new List<string>()
vez devar errors = new List<string>()
é realmente uma perda de tempo, mas escreverIEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
, onde o tipo de retorno não é realmente claro, é realmente maior em termos de legibilidade. (mesmo estúdio visual pode dar a você no foco do mouse)Com base na versão LINQ, se você deseja unir todas as mensagens de erro em uma sequência:
fonte
Consegui fazer isso usando um pouco de LINQ,
O método acima retorna uma lista de erros de validação.
Leitura adicional:
Como ler todos os erros do ModelState no ASP.NET MVC
fonte
Durante a depuração, acho útil colocar uma tabela na parte inferior de cada uma das minhas páginas para mostrar todos os erros do ModelState.
fonte
Como descobri que segui o conselho das respostas fornecidas até agora, é possível obter exceções sem que as mensagens de erro sejam definidas. Para detectar todos os problemas, você realmente precisa obter o ErrorMessage e o Exception.
ou como um método de extensão
fonte
Caso alguém queira retornar a propriedade Name of the Model para vincular a mensagem de erro em uma exibição fortemente tipada.
Dessa forma, você pode realmente vincular o erro ao campo que o lançou.
fonte
Enviar apenas as mensagens de erro não foi suficiente para mim, mas foi o que fez.
fonte
Para o caso de alguém precisar, eu fiz e usei a seguinte classe estática em meus projetos
Exemplo de uso:
Usos:
Classe:
fonte
E isso também funciona:
fonte
SelectMany
estiver disponível.Útil para passar uma série de mensagens de erro para o View, talvez via Json:
fonte
Isso está se expandindo com a resposta de @Dunc. Ver comentários de documentos xml
fonte
Além disso,
ModelState.Values.ErrorMessage
pode estar vazio, masModelState.Values.Exception.Message
pode indicar um erro.fonte
Na sua implementação, está faltando uma classe estática, deve ser.
em vez
fonte
simplesmente use asp-validation-summary Tag Helper
fonte