私はasp.net MVC 5プロジェクトで厳密に型付けされたセッション変数を実装しようとしています。私は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
に設計時であり、それはそれは私がEF 6を使用していますし、User
クラスはEFによって自動生成されていることは注目に値するかもしれ'User' is a type, which is not valid in the given context.'
を述べています。
.cshtmlファイルの拡張方法が間違っていますか、それとも何か不足していますか?
私はあなたがあなたのビューでコードを変更する必要があると思う
'Project1.Models.User'はクラスです。あなたのメソッドはそれが型を渡すことを期待していますか? – Shyju
'TryGetAuthenticatedValue'は' out'変数を使います。次のようなことをする必要があります: 'Project1.Models.User usr; if(Session.TryGetAuthenticatedValue(out usr)&& usr!= null)... ' –
OutパラメータとしてProject1.Models.UserクラスのオブジェクトをSession.TryGetAuthenticatedValueメソッドに渡す必要があります。あなたが渡しているのはクラスであり、オブジェクトではありません。 –