[asp.net-mvc] 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; }
}

제어 장치:

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



답변

ValidationSummary 플래그가 작동하는 방식은 ModelErrors 만 string.empty키로 표시하는 것 입니다. 그렇지 않으면 속성 오류라고 가정합니다. 추가하는 사용자 정의 오류에는 ‘error’키가 있으므로 ValidationSummary (true)를 호출 할 때 표시되지 않습니다. 다음과 같이 빈 키를 사용하여 사용자 지정 오류 메시지를 추가해야합니다.

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


답변

지정된 키에 대해 validationMessage를 표시 할 수 있으므로 더 효과적입니다.

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

다음과 같이 표시하십시오.

    @Html.ValidationMessage("keyName")


답변

나는 이것이 오래된 종류라는 것을 알고 있으며 147 위로 투표하여 답변으로 표시되었지만 고려해야 할 다른 것이 있습니다.

필요하면 ValidationSummary에 모든 모델 오류, 속성 이름 및 string.Empty 키가 모두 표시 될 수 있습니다. 이를 수행하는 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>


답변

@Html.ValidationSummary(false,"", new { @class = "text-danger" })

이 줄을 사용하면 도움이 될 수 있습니다


답변

내 경우에는 반환 때문에 작동하지 않았습니다.

사용하는 대신:

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

나는 사용했다 :

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

그것은 모델이므로 ModelState.AddModelError("keyName","Message");모델과 함께 작동 해야하는 것은 분명합니다.

이 답변은 이유를 보여줍니다.
DataAnnotations로 유효성 검사 추가


답변

거의 모든 것이 옳은 것처럼 보일 경우, 다음 과 같은 CSS 재정의 를 통해 유효성 검사 요약이 명시 적으로 숨겨져 있지 않은지 확인해야합니다 .

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

@Html.ValidationSummary요약이 validation-summary-valid클래스 와 함께 동적으로 렌더링 되므로 이로 인해 가 표시되지 않을 수도 있습니다 .