Mam problem z Html.ValidationSummary. Nie chcę wyświetlać błędów właściwości w ValidationSummary. A kiedy ustawię Html.ValidationSummary (true), nie wyświetla komunikatów o błędach z ModelState. Gdy występuje wyjątek w działaniu kontrolera na łańcuch
MembersManager.RegisterMember(member);
sekcja catch dodaje błąd do ModelState:
ModelState.AddModelError("error", ex.Message);
Ale ValidationSummary nie wyświetla tego komunikatu o błędzie. Po ustawieniu Html.ValidationSummary (false) wszystkie komunikaty są wyświetlane, ale nie chcę wyświetlać błędów właściwości. Jak mogę rozwiązać ten problem?
Oto kod, którego używam:
Model:
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; }
}
Kontroler:
[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);
}
}
Widok:
<% 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);
też nie działa. Musisz użyćModelState.AddModelError(string, string)
przeciążenia, jak pokazano powyżej.Działa to lepiej, ponieważ można wyświetlić komunikat sprawdzania poprawności dla określonego klucza:
i wyświetl to w następujący sposób:
źródło
Wiem, że jest to trochę stare i zostało oznaczone jako odpowiedzi przy 147 głosach, ale jest jeszcze coś do rozważenia.
Możesz mieć wszystkie błędy modelu, właściwość o nazwie i string. Puste klucze, w razie potrzeby pokazywane w ValidationSummary. W ValidationSummary występuje przeciążenie, które to zrobi.
źródło
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
na@Html.ValidationSummary(false, "", new { @class = "text-danger" })
Może tak:
I na wyświetlaczu dodaj:
LUB
źródło
Korzystanie z tej linii może być pomocne
źródło
W moim przypadku nie działało z powodu powrotu.
Zamiast używać:
Użyłem:
To model, więc obvius
ModelState.AddModelError("keyName","Message");
musi współpracować z modelem.Ta odpowiedź pokazuje, dlaczego. Dodawanie sprawdzania poprawności za pomocą DataAnnotations
źródło
Jeśli prawie wszystko wydaje się słuszne, inną rzeczą, na którą należy zwrócić uwagę, jest upewnienie się, że podsumowanie walidacji nie jest jawnie ukryte za pomocą jakiegoś zastąpienia CSS, takiego jak to:
Może to również powodować
@Html.ValidationSummary
ukrywanie się, ponieważ podsumowanie jest dynamicznie renderowane zvalidation-summary-valid
klasą.źródło
Możesz spróbować,
źródło
DODAJ go w najniższej części swojego widoku:
źródło