У меня есть некоторые проблемы с Html.ValidationSummary. Я не хочу отображать ошибки свойств в ValidationSummary. И когда я устанавливаю Html.ValidationSummary (true), он не отображает сообщения об ошибках из ModelState. Когда есть некоторое исключение в действии контроллера на строку
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; }
}
контроллер:
[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);
}
}
Посмотреть:
<% 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);
похоже, тоже не работает. Вы должны использоватьModelState.AddModelError(string, string)
перегрузку, как показано выше.Это работает лучше, так как вы можете показать validationMessage для указанного ключа:
и отобразить это так:
источник
Я знаю, что это старое и было отмечено как ответы с 147 голосами против, но есть еще кое-что, чтобы рассмотреть.
У вас могут быть все ошибки модели, как свойство name, так и string.Empty ключи, которые будут показаны в ValidationSummary, если вам нужно. Существует перегрузка в ValidationSummary, которая сделает это.
источник
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
на@Html.ValidationSummary(false, "", new { @class = "text-danger" })
Может быть так:
И на дисплее добавить:
ИЛИ
источник
Использование этой строки может быть полезным
источник
В моем случае это не сработало из-за возврата.
Вместо того, чтобы использовать:
Я использовал:
Это модель, так что, очевидно, что
ModelState.AddModelError("keyName","Message");
должна работать с моделью.Этот ответ показывает, почему. Добавление проверки с DataAnnotations
источник
Если почти все кажется правильным, еще одна вещь, на которую следует обратить внимание, это убедиться, что сводка проверки не скрыта явно с помощью некоторого переопределения CSS, например:
Это также может привести к тому, что они
@Html.ValidationSummary
будут отображаться скрытыми, поскольку сводка динамически отображается сvalidation-summary-valid
классом.источник
Можешь попробовать,
источник
ДОБАВЬТЕ это в самой нижней части вашего вида:
источник