Estou com algum problema com o Html.ValidationSummary. Não quero exibir erros de propriedade no ValidationSummary. E quando eu defino Html.ValidationSummary (true), ele não exibe mensagens de erro do ModelState. Quando houver alguma exceção na ação do controlador na string
MembersManager.RegisterMember(member);
A seção catch adiciona um erro ao ModelState:
ModelState.AddModelError("error", ex.Message);
Mas ValidationSummary não exibe essa mensagem de erro. Quando defino Html.ValidationSummary (false), todas as mensagens são exibidas, mas não quero exibir erros de propriedade. Como posso resolver este problema?
Aqui está o código que estou usando:
Modelo:
public class Member
{
[Required(ErrorMessage = "*")]
[DisplayName("Login:")]
public string Login { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Password:")]
public string Password { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Confirm Password:")]
public string ConfirmPassword { get; set; }
}
Controlador:
[HttpPost]
public ActionResult Register(Member member)
{
try
{
if (!ModelState.IsValid)
return View();
MembersManager.RegisterMember(member);
}
catch (Exception ex)
{
ModelState.AddModelError("error", ex.Message);
return View(member);
}
}
Visão:
<% using (Html.BeginForm("Register", "Members", FormMethod.Post,
new { enctype = "multipart/form-data" })) {%>
<p>
<%= Html.LabelFor(model => model.Login)%>
<%= Html.TextBoxFor(model => model.Login)%>
<%= Html.ValidationMessageFor(model => model.Login)%>
</p>
<p>
<%= Html.LabelFor(model => model.Password)%>
<%= Html.PasswordFor(model => model.Password)%>
<%= Html.ValidationMessageFor(model => model.Password)%>
</p>
<p>
<%= Html.LabelFor(model => model.ConfirmPassword)%>
<%= Html.PasswordFor(model => model.ConfirmPassword)%>
<%= Html.ValidationMessageFor(model => model.ConfirmPassword)%>
</p>
<div>
<input type="submit" value="Create" />
</div>
<%= Html.ValidationSummary(true)%>
<% } %>
ModelState.AddModelError(string.Empty, ex);
também não parece funcionar. Você deve usar aModelState.AddModelError(string, string)
sobrecarga como mostrado acima.Isso funciona melhor, pois você pode mostrar validationMessage para uma chave especificada:
e exibi-lo assim:
fonte
Eu sei que isso é meio antigo e foi marcado como respostas com 147 votos a favor, mas há algo mais a considerar.
Você pode ter todos os erros de modelo, a propriedade nomeada e string.Empty keys iguais, serão mostrados no ValidationSummary, se necessário. Há uma sobrecarga no ValidationSummary que fará isso.
fonte
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
para@Html.ValidationSummary(false, "", new { @class = "text-danger" })
Talvez assim:
E no display adicione:
OU
fonte
Usar esta linha pode ser útil
fonte
No meu caso, não estava funcionando por causa do retorno.
Ao invés de usar:
Eu usei:
É um modelo, então é óbvio que
ModelState.AddModelError("keyName","Message");
deve trabalhar com um modelo.Esta resposta mostra o porquê. Adicionando validação com DataAnnotations
fonte
Se quase tudo parece certo, outra coisa a se observar é garantir que o resumo da validação não esteja sendo explicitamente oculto por meio de alguma substituição de CSS como esta:
Isso também pode fazer com que o
@Html.ValidationSummary
apareça oculto, pois o resumo é renderizado dinamicamente com avalidation-summary-valid
classe.fonte
Podes tentar,
fonte
Adicione-o na parte mais baixa da sua visualização:
fonte