2017-01-17 3 views
0

내 asp.net MVC 5 프로젝트에서 강력한 형식의 세션 변수를 구현하려고합니다. 내가 벗어난 광산을 기초로하고 있지만 Extension에 대한 지식 부족으로 인해 익숙하지 않은 오류가있는 this SO article을 발견했습니다.확장 메서드 던지는 오류

public static class SessionExtensions 
{ 
    public static bool TryGetValue<T>(this HttpSessionStateBase session, out T value) 
     where T : class 
    { 
     var name = typeof(T).FullName; 

     value = session[name] as T; 

     var result = value != null; 

     return result; 
    } 

    public static void SetValue<T>(this HttpSessionStateBase session, T value) 
    { 
     var name = typeof(T).FullName; 

     session[name] = value; 
    } 

    public static void RemoveValue<T>(this HttpSessionStateBase session) 
    { 
     var name = typeof(T).FullName; 

     session[name] = null; 
    } 

    public static bool ValueExists(this HttpSessionStateBase session, Type objectType) 
    { 
     var name = objectType.FullName; 

     var result = session[name] != null; 

     return result; 
    } 

    public static bool TryGetAuthenticatedValue<T>(this HttpSessionStateBase session, 
     out T value) 
     where T : class 
    { 
     value = null; 

     if (HttpContext.Current.User != null 
      && HttpContext.Current.User.Identity != null 
      && HttpContext.Current.User.Identity.IsAuthenticated) 
     { 
      var name = typeof(T).FullName; 

      value = session[name] as T; 
     } 

     var result = value != null; 

     return result; 
    } 
} 

쉽게 코드 숨김에서에 전체 개체를 할당 할 수 있습니다 :

DBRepository repo = new DBRepository(); 
var user = repo.GetAppUserInformation(userId); 
Session.SetValue(user); 

을이 큰 노력하고 모든

다음은 SessionExtensions 클래스입니다. 내가 가지고있는 문제/오류는 세션에서 User 개체를 검색하려고 할 때 발생합니다. TryGetAuthenticatedValue 확장 방법을 볼 수 있지만 내 .cshtml에서 사용하려고하면 오류가 발생합니다.

<span class="username"> 
    @{ 
     if(Session.TryGetAuthenticatedValue(Project1.Models.User) != null) 
     { 
      //Display username from Session object. 
     } 
    } 
</span> 

오류가 Project1.Models.User에 디자인 타임이며 'User' is a type, which is not valid in the given context.'

을 그것은 내가 EF 6을 사용하고하고 User 클래스가 자동으로 생성 EF입니다 협조 할 수있다 주장한다.

.cshtml 파일에 잘못된 확장 방법을 사용하고 있습니까? 아니면 다른 것이 있습니까?

+0

'Project1.Models.User'는 클래스입니다. 귀하의 방법은 그것이 유형을 통과 할 것으로 기대하고 있습니까? – Shyju

+0

'TryGetAuthenticatedValue'는'out' 변수를 사용합니다. 당신은 다음과 같은 것을 할 필요가있다 :'Project1.Models.User usr; if (Session.TryGetAuthenticatedValue (out usr) && usr! = null) ... ' –

+0

Project1.Models.User 클래스의 객체를 out 매개 변수로 Session.TryGetAuthenticatedValue 메소드에 전달해야합니다. 당신이 지나가고있는 것은 클래스가 아니라 객체입니다. –

답변

2

나는 당신이보기에 코드를 변경할 필요가 있다고 생각 :

<span class="username"> 
    @{ 
     Project1.Models.User user = null; 
     if(Session.TryGetAuthenticatedValue(out user)) 
     { 
      //Display username from Session object. 
     } 
    } 
</span> 
당신이 널 (null)를 확인 할 필요가 없습니다 부울을 반환 TryGetAuthenticatedValue 방법부터

, 그리고 당신의 변수에 전달해야 형식 자체가 아닌 검색 할 형식입니다.

희망 하시겠습니까?

+0

'out user '를 사용하고 있다면 그냥 먼저 null을 할당 할 필요가 없습니다. –

+0

그래, 나도 알아.하지만 난 상관없이 값을 초기화하는 버릇이된다. – MikeS

+0

뭔가 작아야한다는 것을 알았습니다. 도와 주셔서 감사합니다! – Robert