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

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

enter image description here

может, так:

[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

    Ничего не найдено.