내 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 파일에 잘못된 확장 방법을 사용하고 있습니까? 아니면 다른 것이 있습니까?
'Project1.Models.User'는 클래스입니다. 귀하의 방법은 그것이 유형을 통과 할 것으로 기대하고 있습니까? – Shyju
'TryGetAuthenticatedValue'는'out' 변수를 사용합니다. 당신은 다음과 같은 것을 할 필요가있다 :'Project1.Models.User usr; if (Session.TryGetAuthenticatedValue (out usr) && usr! = null) ... ' –
Project1.Models.User 클래스의 객체를 out 매개 변수로 Session.TryGetAuthenticatedValue 메소드에 전달해야합니다. 당신이 지나가고있는 것은 클래스가 아니라 객체입니다. –