문제

주소 개체가 다음과 같이 간단히 정의되어 있습니다.

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 의이 게시물.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top