2011-02-16 1 views
0

I가 실행하는 영문 파일 일부 인라인 코드 가지고NullReferenceException이

<dd><%= encode(Listing.Address.Line1) %> </dd> 

문제가 특정 상황에서 리스팅 객체 속성 예에 따라서 참조 널이 될 것이다을 Address는 예외를 throw합니다. 이 예외는 어떻게 처리합니까? 나는 기본적으로 그것을 무시하고 싶다. 잡아라. 그러면 페이지의 규칙적인 실행/렌더링을 진행한다.

답변

5

null 검사를 수행하십시오. 거의 항상 예외를 처리하는 것보다 발생할 수있는 예외 상황을 테스트하는 것이 좋습니다. 런타임은 처음에 예외를 테스트하고 그에 따라 처리하는 것보다 예외를 던지고 처리하는 데 더 많은 작업을해야합니다.

<%= encode(Listing != null && Listing.Address != null ? Listing.Address.Line1 : string.Empty) %> 

주소를 반드시 확인하십시오. 누전은 귀하의 친구입니다. 주문은 & &에 있습니다.

넓은 그림을 보지 않고도 사용자의 뷰 모델에 자동으로이를 수행하는 방법이 있음을 제안합니다. 이런 종류의 물건은 당신이 그것을 가지고 있다면보기에보기 흉하게됩니다.

: 당신이 뭔가를 입력 할 수 있습니다 모든 IT 기본 속성이 null이 아닌, 따라서 상당히 Listing가 null이 아닌 경우 간단하고, 수 문제를 가정

+0

아차는, 당신을 보지 못했어요을 거의 똑같은 일을 기록했다. +1. –

-2

사용이

<%= if(Listing.Address.Line1 != null) 
     { 
     encode(Listing.Address.Line1) 
     } 
%> 
+0

리스트가 null 인 경우 이것은 똑같은 예외를 발생시킵니다. 이 작업을 수행하기 전에 Listing의 존재 여부를 테스트하지 않습니다. –

+0

또한'if' 문은 값을 반환하지 않으므로'<%= %>'태그에는 사용할 수 없습니다. – StriplingWarrior

1

(((새 목록 (AddressObj))). Address.Line1 ?? 목록) = 인코딩 <%는 %가>

당신 같은 그 Address.Line1 항상 값을가집니다 생성자와 여기에 Listing 클래스를 작성할 수 있습니다.

이제는 문제가 상당히 복잡한 경우 Listing 개체에 유효한 인스턴스가 있지만 그 기본 특성이 없을 수 있습니다. 가장 좋은 방법은 encode 메서드를 다른 메서드 나 속성에 포함하여 예상 된 결과를 반환하는 것입니다. 그것을 마크 업에서 호출하십시오. 마크 업에서

public string EncodedAddress 
{ 
    get 
    { 
     if (Listing == null) 
      return string.Empty; 
     if (Listing.Address == null) 
      return string.Empty; 
     return encode(Listing.Address.Line1); 
    } 
} 

당신은 같은 것을 할 :

<%= EncodedAddress %>