복잡한 유형의 idataerrorinfo
-
10-07-2019 - |
문제
주소 개체가 다음과 같이 간단히 정의되어 있습니다.
public class Address
{
public string StreetNumber { get; set; }
public string StreetAddress { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
}
상당히 간단합니다. 조언에 따라 다른 사람에 대한 답변 의문 나는 물었다. 나는 언급하고있다 이것 블로그 게시물 내 UI를 유형의 대상에 데이터베이닝 할 때 (주소 MailingAddress 필드가 포함되어 있음).
문제는 IdataError 인터페이스 메소드가 주소 유형의 속성을 검증하지 않는다는 것입니다.
public string this[string columnName]
{
get
{
string result = null;
// the following works fine
if(columnName == "FirstName")
{
if (string.IsNullOrEmpty(this.FirstName))
result = "First name cannot be blank.";
}
// the following does not run
// mostly because I don't know what the columnName should be
else if (columnName == "NotSureWhatToPutHere")
{
if (!Util.IsValidPostalCode(this.MailingAddress.PostalCode))
result = "Postal code is not in a know format.";
}
return result;
}
}
그래서, 나는 칼럼 이름이 무엇인지 모르겠다. 나는 그것을 통과했고, 그것은 (고유 한 유형의) 공개 속성이 아닌 어떤 것도 본 적이 없다. 나는 심지어 다음과 같은 성명서를 실행하고 깨뜨 렸습니다.
if (columnName.Contains("Mailing") || columnName.Contains("Postal"))
System.Windows.Forms.MessageBox.Show(columnName);
모두 소용이 없습니다.
내가 놓친 것이 있습니까?
해결책
오류 메시지를 제공하려는 모든 클래스에서 ierrorinfo를 정의해야합니다.
다른 팁
보세요 내 대답.
이것은 Modelbinder를 사용하여 사용하지 않고도 모델의 '클래스 레벨'점검을 추가하는 방법을 설명합니다. IDataError
- 여기서 본 것처럼 여기에서는 매우 서투른 것일 수 있습니다. 여전히 [필수] 속성 또는 기타 사용자 정의 검증 속성을 사용할 수 있지만 개별 모델 오류를 추가하거나 제거 할 수 있습니다. 데이터 주석을 사용하는 방법에 대한 자세한 내용은 적극 권장합니다. Scott Gu 의이 게시물.
제휴하지 않습니다 StackOverflow