2014-10-14 2 views
0

IEnumerable<Request>을 표시하기 위해 System.Web.Helpers.WebGrid을 사용하고 있습니다. 요청에는 탐색 속성이 있습니다.WebGrid - null 참조 인 경우 탐색 속성의 필드를 기준으로 정렬

내가 인 경우 해당 필드에서이라는 제목을 클릭하면 예외 Object reference not set to an instance of an object.가 발생합니다.

I 코드 열이 유형이 방법 : 나는 그리드 로딩에 사용자 지정 결과를 설정 format 매개 변수를 사용하고

grid = new WebGrid(Model.Requests); 

// things 

@grid.GetHtml(columns: new[]{ 
    //[...] columns 
    SDMs.Column("User.Name", "User", format: p => p.User != null ? p.User.Name : ""), 
    //[...] more columns 
}) 

참고.

이것은 User이없는 행 때문에 발생한다고 생각하지만 이러한 경우에 동작을 사용자 정의하는 방법을 알지 못합니다.

웹상에서 this을 찾았지만 내 버전의 어셈블리에는이 방법이없는 것 같습니다. 나는 그것을 얻는 방법을 모른다. NuGet 패키지를 설치하려고했지만 도움이되지 않았습니다.

아이디어가 있으십니까?

+0

예를 들어 사용자가 null이 아닌 항목 만보기에 전달할 수 있습니다. – Krekkon

+0

표시 할 사용자가없는 행이 필요합니다. 공란으로. – Umagon

+0

제 안부를 확인해주십시오, 이것이 당신에게 의미가 있습니까? – Krekkon

답변

2

요청에 대한 확장 메소드/부분 클래스의 속성 (예 : ActualOrEmptyUserName)을 추가하십시오. Getter에서 사용자가 채워 졌는지 여부를 확인할 수 있습니다. 그렇다면 user.name을 반환하고 그렇지 않으면 ""을 반환합니다.

그리고 당신의 grigview에

, 당신은

public partial class Request 
    { 
     public string ActualOrEmptyUserName 
     { 
      get 
      { 
       var username = ""; 
       if (Request.User != null && Request.User.Name != null) 
        username = Request.User.Name; 

       return username; 
      } 
     } 
    } 

... 

SDMs.Column("ActualOrEmptyUserName", "User") 

는 또 다른 옵션 user.name의 ActualOrEmptyUserName의 insetad에 열을 묶어 : Itarete (또는 LINQ)의 목록을 구유하고있는 경우, 사용자의 값을 확인 그 값에 빈 사용자를 만들고 string.empty 또는 ""로 이름을 채 웁니다.

이 작성은 사용자 또는 뷰의 상단 부분에있을 수 있습니다. 이것은 당신에게 달려 있습니다.

하지만 내가 시도한 형식을 사용할 수없는 것 같습니다.

+0

나는 첫 번째 옵션의 외모를 좋아한다. 나는 곧 이것을 시도 할 것이다. 잘 작동하면 받아 들일 것입니다. 감사! – Umagon

관련 문제