ASP.NET MVC Html.ValidationSummary (true) не отображает ошибки модели
у меня есть некоторые проблемы с 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; }
}
7 ответов:
Я считаю, что способ ValidationSummary флаг работает это будет отображать только ModelErrors для
string.emptyкак ключ. В противном случае предполагается, что это ошибка свойства. Нет никакой проверки, что строка, которую вы предоставляете, является / не является свойством в модели.ModelState.AddModelError(string.Empty, ex.Message);
это работает лучше, так как вы можете показать validationMessage для указанного ключа:
ModelState.AddModelError("keyName","Message");и отобразить его следующим образом:
@Html.ValidationMessage("keyName")
Я знаю, что это довольно старый и был отмечен как ответы с 147 голосами, но есть что-то еще, чтобы рассмотреть.
вы можете иметь все ошибки модели, свойство с именем и строкой.Пустые ключи, так же, будут показаны в 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); } }и на дисплее добавить:
<div class="alert alert-danger"> @Html.ValidationMessage("keyName") </div>или
<div class="alert alert-danger"> @Html.ValidationSummary(false) </div>
в моем случае он не работал из-за возврата.
вместо:
return RedirectToAction("Rescue", "CarteiraEtapaInvestimento", new { id = investimento.Id, idCarteiraEtapaResgate = etapaDoResgate.Id });Я:
return View("ViewRescueCarteiraEtapaInvestimento", new CarteiraEtapaInvestimentoRescueViewModel { Investimento = investimento, ValorResgate = investimentoViewModel.ValorResgate });его модель, так что это obvius, что
ModelState.AddModelError("keyName","Message");должен работать с моделью.этот ответ показывает, почему. добавление проверки с помощью DataAnnotations
Если почти все кажется правильным, еще одна вещь, на которую нужно обратить внимание, - это убедиться, что резюме проверки явно не скрыто через некоторые CSS переопределить следующим образом:
.validation-summary-valid { display: none; }Это также может привести к
@Html.ValidationSummaryчтобы казаться скрытым, так как сводка динамически отображается с помощьюvalidation-summary-validкласса.
добавьте его в самой нижней части OG ваш взгляд:
Скрипты@раздел { @Файлы сценариев.Render ("~/bundles/jqueryval")}

Comments