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
클래스 와 함께 동적으로 렌더링 되므로 이로 인해 가 표시되지 않을 수도 있습니다 .