ASP.NET MVC Html.ValidationSummary (true) не отображает ошибки модели

У меня есть некоторые проблемы с Html.ValidationSummary. Я не хочу отображать ошибки свойств в ValidationSummary. И когда я устанавливаю Html.ValidationSummary (true), он не отображает сообщения об ошибках из ModelState. Когда есть какое-то исключение в действии controllerа на строку

MembersManager.RegisterMember(member); 

catch добавляет ошибку в ModelState:

 ModelState.AddModelError("error", ex.Message); 

Но ValidationSummary не отображает это сообщение об ошибке. Когда я устанавливаю Html.ValidationSummary (false), все сообщения отображаются, но я не хочу отображать ошибки свойств. Как я могу исправить эту проблему?

Вот код, который я использую:

Модель:

 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; } } 

controller:

 [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); } } 

Посмотреть:

  

model.Login)%> model.Login)%> model.Login)%>

model.Password)%> model.Password)%> model.Password)%>

model.ConfirmPassword)%> model.ConfirmPassword)%> model.ConfirmPassword)%>

Я считаю, что работает флаг ValidationSummary, он отображает только ModelErrors для string.empty как ключ. В противном случае предполагается, что это ошибка свойства. Нет подтверждения того, что строка, которую вы предоставляете, не является свойством в модели.

 ModelState.AddModelError(string.Empty, ex.Message); 

Это работает лучше, так как вы можете показать validationMessage для указанного ключа:

  ModelState.AddModelError("keyName","Message"); 

и отобразить его следующим образом:

  @Html.ValidationMessage("keyName") 

Я знаю, что это своего рода старый и отмечен как ответы с 147 голосами, но есть еще что-то, что нужно учитывать.

Вы можете иметь все ошибки модели, свойство named и string.Empty, так же, как показано на странице ValidationSummary. В ValidationSummary есть перегрузка, которая сделает это.

  // excludePropertyErrors: // true to have the summary display model-level errors only, or false to have // the summary display all errors. public static MvcHtmlString ValidationSummary(this HtmlHelper htmlHelper, bool excludePropertyErrors); 

введите описание изображения здесь

Может быть, так:

 [HttpPost] public ActionResult Register(Member member) { try { if (!ModelState.IsValid) { ModelState.AddModelError("keyName", "Form is not valid"); return View(); } MembersManager.RegisterMember(member); } catch (Exception ex) { ModelState.AddModelError("keyName", ex.Message); return View(member); } } 

А на дисплее добавить:

 
@Html.ValidationMessage("keyName")

ИЛИ

 
@Html.ValidationSummary(false)

В моем случае он не работал из-за возвращения.

Вместо того, чтобы использовать:

 return RedirectToAction("Rescue", "CarteiraEtapaInvestimento", new { id = investimento.Id, idCarteiraEtapaResgate = etapaDoResgate.Id }); 

Я использовал:

 return View("ViewRescueCarteiraEtapaInvestimento", new CarteiraEtapaInvestimentoRescueViewModel { Investimento = investimento, ValorResgate = investimentoViewModel.ValorResgate }); 

It’sa Model, поэтому это ModelState.AddModelError("keyName","Message"); что ModelState.AddModelError("keyName","Message"); должен работать с моделью.

Этот ответ показывает, почему. Добавление проверки с помощью DataAnnotations

Если почти все кажется правильным, другое, на что нужно обратить внимание, – убедиться, что резюме проверки не скрыто скрыто с помощью некоторого переопределения CSS следующим образом:

 .validation-summary-valid { display: none; } 

Это также может привести к тому, что @Html.ValidationSummary будет скрытым, так как сводка динамически отображается с помощью classа validation-summary-valid .

ДОБАВЛЯЙТЕ это в самой нижней части вашего вида:

Скрипты @section {@ Scripts.Render (“~ / bundles / jqueryval”)}

Давайте будем гением компьютера.