asp.net-mvc-2 - ModelState.AddModelError-속성이 아닌 오류를 추가하려면 어떻게해야합니까?




asp.net-mvc-2-validation (4)

모델 도트 속성을 문자열에 넣으면 나를 위해 일했습니다. ModelState.AddModelError("Item1.Month", "This is not a valid date");

Create(FooViewModel fvm){...} 에서 데이터베이스를 검사하여 fvm.prop1fvm.prop2 이미 해당 조합에 있는지 확인합니다. 그렇다면 modelstate에 오류를 추가하고 전체보기를 반환하고 싶습니다. 나는 시도했다 :

public ActionResult Create(FooViewModel fvm){
    if (ThatComboAlreadyExists(fvm)) {
      ModelState.AddModelError("Model", "There is already one like that");
      return View(fvm);
    }
}

...하지만 나는 Html.ValidationSummary 에 오류를 표시하지 않습니다. 이는 그들이 나타날 것이라고 가정하는 곳입니다. 나는 "모델"이 올바른 열쇠가 아니라는 의심을 가지고 있지만, 나는 라 구글을 찾을 수 없었다.


모델 오류를 모델의 모든 속성에 추가 할 수 있습니다. 새 속성을 만드는 데 관련된 것이없는 경우 제안합니다.

예를 들어, 전자 메일이 이미 DB에서 사용되고 있는지 확인하고 작업의 전자 메일 속성에 오류를 추가합니다. 따라서보기를 반환 할 때 오류가 있음을 알고이를 사용하여 표시하는 방법을 알고 있습니다.

<%: Html.ValidationSummary(true)%>
<%: Html.ValidationMessageFor(model => model.Email) %>

ModelState.AddModelError("Email", Resources.EmailInUse);

결국 나는 찾고 있던 사용법 의 예 를 우연히 발견했다. 일반적인 경우처럼 모델 중 하나의 속성이 아닌 모델에 오류를 지정했다.

ModelState.AddModelError(string key, string errorMessage);

키에 빈 문자열을 사용하십시오.

ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");

오류 메시지는 예상대로 <%: Html.ValidationSummary() %> 됩니다.


View에 보내기 전에 모델에서 ReturnDate를 초기화 할 수 있습니다.

컨트롤러에서 :

[HttpGet]
public ActionResult SomeAction()
{
    var viewModel = new MyActionViewModel
    {
        ReturnDate = System.DateTime.Now
    };

    return View(viewModel);
}




asp.net-mvc-2 asp.net-mvc-2-validation modelstate