2010-08-10 3 views
2

의 내가 그런 때이ASP.NET MVC : 나는 Modelstate.AddModelError 수동으로

UpdateModel(myModel); 

같은 검증을 modelbinding 사용할 때 나는이 속성

[Required(ErrorMessage = "Add this property")] 
public string MyProperty {get; set;} 

있다고 가정 해 봅시다 액세스 할 때 텍스트 상자가 강조되지 않습니다 양식이 다시 표시되고 MyProperty를 나타내는 텍스트 상자가 이 강조 표시된 (즉, 빨간색 테두리와 분홍색 배경) 오류입니다. Html.ValidateMessageFor() 또한 텍스트 상자 옆에 오류 메시지를 표시합니다.

그러나, 오류가 있다면 나는이

if(string.NullOrEmpty(myModel.MyProperty)) 
    ModelState.AddModelError("MyProperty", "Custom message"); 

처럼 수동으로 할 때, 나는 여전히 오류 메시지가 표시됩니다. 단 Html.ValidationSummary())는 페이지 상단에 오류 목록을 표시합니다. 그러나 texbox는 더 이상 강조 표시되지 않고 Html.ValidateMessageFor()은 아무 것도 표시하지 않습니다.

해결할 수있는 방법이 있습니까?

도와 주셔서 감사합니다.

답변

4

답변없이 2 일이 지난 후에 나는이 질문을 제대로하지 않은 것으로 의심했습니다. 그래서 I asked differntly and got an answer. 누군가가 똑같은 문제가 생길 경우를 대비하여이 질문에 답할 것입니다.

모델이 복합 모델 일 때 모든 것은 키 접두사가 붙지 않는 것이 었습니다. 예를 들어, 내 경우 : OrganizationData 그래서

public class OrganizationData 
{ 
    public string OrganizationName { get; set; } 
} 

에 의해 정의된다

public class FormViewModel 
{ 
    public OrganizationData organizationData { get; set; } 
} 

그리고 나는 내가 접두사 organizationData을 생략하고 대신이

if(string.NullOrEmpty(formViewModel.organizationData.OrganizationName)) 
    ModelState.AddModelError("organizationData.OrganizationName", "Name can't be empty") 

을 수행하지만해야 않았다

ModelState.AddModelError("OrganizationName", "Name can't be empty") 

보기에서 Html 도우미는 ModelState에서 해당 키와 관련된 오류가 있는지 확인합니다. 그래서, 그것이 cae라면, 그것은 스스로를 강조합니다. 이 경우 organizationData.OrganizationNameOrganizationName은과 다릅니다. 따라서 텍스트 상자는 강조 표시되지 않습니다.

한 가지 더. TryUpdateModel()으로 내부적으로 AddModelError()를 사용할뿐만 아니라 올바른 키를 알아낼 수있는 알고리즘을 사용하기 때문에 동일한 결과를 얻었 기 때문에 동일한 결과를 얻지 못했습니다.

나는 수업을 가지고 있다고 생각한다. 나는이 메커니즘을 아는 것만으로 다른 보류중인 문제를 해결할 수있었습니다.

Darin Dimitrov와 Ian Galloway에게 감사드립니다.

관련 문제