[html] ASP.NET MVC에서 모델 상태 오류 수집을 어떻게 얻습니까?

뷰에서 오류 수집을 어떻게 얻습니까?

HTML 도우미 유효성 검사 요약 또는 유효성 검사 메시지를 사용하고 싶지 않습니다. 대신 오류를 확인하고 특정 형식으로 오류가 표시되는지 확인하고 싶습니다. 또한 입력 컨트롤에서 특정 속성 오류를 확인하고 입력에 클래스를 추가하려고합니다.

추신 : 나는 Spark View Engine을 사용하고 있지만 아이디어는 동일해야합니다.

그래서 나는 다음과 같은 일을 할 수 있다고 생각했습니다 …

<if condition="${ModelState.Errors.Count > 0}">
  DispalyErrorSummary()
</if>

....and also...

<input type="text" value="${Model.Name}"
       class="?{ModelState.Errors["Name"] != string.empty} error" />

....

아니면 그런 것.

최신 정보

내 최종 솔루션은 다음과 같습니다.

<input type="text" value="${ViewData.Model.Name}"
       class="text error?{!ViewData.ModelState.IsValid &&
                           ViewData.ModelState["Name"].Errors.Count() > 0}"
       id="Name" name="Name" />

이 속성에 오류가있는 경우에만 오류 CSS 클래스가 추가됩니다.



답변

<% ViewData.ModelState.IsValid %>

또는

<% ViewData.ModelState.Values.Any(x => x.Errors.Count >= 1) %>

특정 속성에 대해 …

<% ViewData.ModelState["Property"].Errors %> // Note this returns a collection


답변

ModelState에서 오류를 얻으려면이 Linq를 사용하십시오.

var modelStateErrors = this.ModelState.Keys.SelectMany(key => this.ModelState[key].Errors);


답변

@ChrisMcKenzie의 답변의 요약 버전 :

var modelStateErrors = this.ModelState.Values.SelectMany(m => m.Errors);


답변

이렇게하면 쉼표로 구분하여 모든 오류가있는 하나의 문자열이 제공됩니다.

string validationErrors = string.Join(",",
                    ModelState.Values.Where(E => E.Errors.Count > 0)
                    .SelectMany(E => E.Errors)
                    .Select(E => E.ErrorMessage)
                    .ToArray());


답변

감사합니다 차드! 키와 관련된 모든 오류를 표시하기 위해 내가 생각해 낸 내용은 다음과 같습니다. 어떤 이유로 기본 Html.ValidationMessage 도우미는 키와 관련된 첫 번째 오류 만 표시합니다.

    <%= Html.ShowAllErrors(mykey) %>

HTMLHelper :

    public static String ShowAllErrors(this HtmlHelper helper, String key) {
        StringBuilder sb = new StringBuilder();
        if (helper.ViewData.ModelState[key] != null) {
            foreach (var e in helper.ViewData.ModelState[key].Errors) {
                TagBuilder div = new TagBuilder("div");
                div.MergeAttribute("class", "field-validation-error");
                div.SetInnerText(e.ErrorMessage);
                sb.Append(div.ToString());
            }
        }
        return sb.ToString();
    }


답변

위에서 몇 가지 답변을 종합하면 다음과 같이 사용됩니다.

var validationErrors = ModelState.Values.Where(E => E.Errors.Count > 0)
    .SelectMany(E => E.Errors)
    .Select(E => E.ErrorMessage)
    .ToList();

validationErrors결국 List<string>각 오류 메시지가 포함 된입니다. 이 목록에서 원하는 목록을 쉽게 수행 할 수 있습니다.

여기에 이미지 설명을 입력하십시오


답변

여기에 VB가 있습니다.

Dim validationErrors As String = String.Join(",", ModelState.Values.Where(Function(E) E.Errors.Count > 0).SelectMany(Function(E) E.Errors).[Select](Function(E) E.ErrorMessage).ToArray())