Mam problem z plikiem Html.ValidationSummary. Nie chcę wyświetlać błędów właściwości w ValidationSummary. A kiedy ustawię Html.ValidationSummary (true), nie wyświetlają się komunikaty o błędach z ModelState. Gdy istnieje jakiś wyjątek w akcji kontrolera na ciągASP.NET MVC Html.ValidationSummary (true) nie wyświetla błędów modelu
MembersManager.RegisterMember(member);
sekcji catch dodaje błąd do ModelState:
ModelState.AddModelError("error", ex.Message);
Ale ValidationSummary nie wyświetla komunikat 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 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)%>
<% } %>
Czy poprawiono ten problem w MVC3? –
@LordCover: Zgaduję, że to "działa zgodnie z założeniami", a nie błąd - domyślnie używane przeciążenie ValidationSummary() wyklucza błędy ModelState związane z właściwościami samego modelu. To pozostawia te błędy, które mają być reprezentowane przez Html.ValidationMessageFor() wywołuje dla każdej właściwości, bez ich duplikacji w podsumowaniu. Mając to na uwadze, wydaje się, że jakikolwiek błąd modelu dodany za pomocą niepustego klucza jest skojarzony z właściwością modelu, nawet jeśli klucz nie pasuje do nazwy właściwości. –
Uwaga dla innych implementatorów: 'ModelState.AddModelError (string.Empty, ex);' nie wydaje się działać. Musisz użyć przeciążenia 'ModelState.AddModelError (string, string)' jak pokazano powyżej. Aktualizacja – WolfyUK