Estou verificando meu banco de dados Create(FooViewModel fvm){...}
para ver se o fvm.prop1
e fvm.prop2
já existe nessa combinação; Nesse caso, desejo adicionar um erro ao modelstate e retornar a exibição inteira. Eu tentei:
public ActionResult Create(FooViewModel fvm){
if (ThatComboAlreadyExists(fvm)) {
ModelState.AddModelError("Model", "There is already one like that");
return View(fvm);
}
}
... mas não consigo exibir erros no Html.ValidationSummary
, que é onde suponho que eles apareceriam. Suspeito que "Modelo" não seja a chave certa, mas não consegui encontrar nada no Google.
asp.net-mvc-2
asp.net-mvc-2-validation
modelstate
Scott Baker
fonte
fonte
Respostas:
Acabei encontrando um exemplo do uso que estava procurando - para atribuir um erro ao Modelo em geral, em vez de uma de suas propriedades, como de costume:
mas use uma string vazia para a chave:
A mensagem de erro será apresentada
<%: Html.ValidationSummary() %>
como você esperaria.fonte
ModelState.AddError(errorMessage)
ouModelState.AddGlobalError(errorMessage)
... seria intuitivo e mais fácil descobrir como adicionar uma mensagem de erro não relacionada às propriedades de nenhum modelo.@Html.ValidationMessage(string.Empty)
ValidationSummaryErrors(bool excludePropertyErrors)
sobrecarga exibirá todos os erros de validação se o argumento for falso ou apenas erros não específicos da propriedade (chave = "") se o argumento for verdadeiro.Você pode adicionar o erro de modelo em qualquer propriedade do seu modelo, sugiro que não haja nada relacionado à criação de uma nova propriedade.
Como exemplo, verificamos se o email já está em uso no DB e adicionamos o erro à propriedade Email na ação. Assim, quando eu retorno a exibição, eles sabem que há um erro e como mostrá-lo usando
e
fonte
(m=>m.email).SomeMagicToString()
?nameof
operador que vem no C # 6.0 resolve esse problema de cadeia mágica. msdn.microsoft.com/pt-br/magazine/dn802602.aspxColocar a propriedade dot model em strings funcionou para mim:
ModelState.AddModelError("Item1.Month", "This is not a valid date");
fonte