Ich versuche, stark typisierte Sitzungsvariablen in meinem asp.net MVC 5 Projekt zu implementieren. Ich habe this SO article gefunden, auf die ich mich stütze, habe aber einige Fehler, die ich aufgrund meines Mangels an Erweiterungen nicht kenne.Extension Methode werfen Fehler
Hier ist die SessionExtensions
Klasse:
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;
}
}
die leicht ganze Objekte in Code-behind zuordnen:
DBRepository repo = new DBRepository();
var user = repo.GetAppUserInformation(userId);
Session.SetValue(user);
All diese große funktioniert. Das Problem/der Fehler, den ich habe, ist, wenn ich versuche, das User
Objekt aus der Sitzung abzurufen. Ich sehe die Erweiterungsmethode TryGetAuthenticatedValue
, aber wenn ich versuche, es in meinem .cshtml zu verwenden, erhalte ich einen Fehler.
<span class="username">
@{
if(Session.TryGetAuthenticatedValue(Project1.Models.User) != null)
{
//Display username from Session object.
}
}
</span>
Der Fehler ist zur Entwurfszeit auf Project1.Models.User
und es heißt 'User' is a type, which is not valid in the given context.'
Es kann sich lohnen, unter Hinweis darauf, dass ich mit EF 6 und die User
Klasse ist automatisch generiert von EF.
Ich verwende die Extension-Methode falsch in der .cshtml-Datei oder fehlt noch etwas?
'Project1.Models.User' ist eine Klasse. Erwartet Ihre Methode, dass ein Typ übergeben wird? – Shyju
'TryGetAuthenticatedValue' verwendet eine 'out'-Variable. Sie müssen etwas tun wie: 'Project1.Models.User usr; if (Session.TryGetAuthenticatedValue (aus usr) && usr! = null) ... ' –
Sie müssen ein Objekt der Project1.Models.User-Klasse als out-Parameter an die Session.TryGetAuthenticatedValue-Methode übergeben. Was du passierst, ist Klasse, kein Objekt. –