我认为使用 Session 没有任何问题,即使对于 MVC 也是如此。它是一个工具,当你需要它时使用它。我发现大多数人倾向于避免使用 Session,因为代码通常很丑陋。我喜欢在我需要存储在会话中的对象周围使用通用包装器,它提供了一个强类型和可重用的类(示例):
public abstract class SessionBase<T> where T : new()
{
private static string Key
{
get { return typeof(SessionBase<T>).FullName; }
}
public static T Current
{
get
{
var instance = HttpContext.Current.Session[Key] as T;
// if you never want to return a null value
if (instance == null)
{
HttpContext.Current.Session[Key] = instance = new T();
}
return instance;
}
set
{
HttpContext.Current.Session[Key] = value;
}
}
public static void Clear()
{
var instance = HttpContext.Current.Session[Key] as T;
if (instance != null)
{
HttpContext.Current.Session[Key] = null;
}
}
}
创建需要存储的类:
[Serializable] // The only requirement
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
创建您的具体类型:(真的很简单吗?)
public class PersonSession : SessionBase<Person> { }
随心所欲地使用它(只要它是可序列化的)
public ActionResult Test()
{
var Person = db.GetPerson();
PersonSession.Current = Person;
this.View();
}
[HttpPost]
public ActionResult Test(Person)
{
if (Person.FirstName != PersonSession.Current.FirstName)
{
// etc, etc
PersonSession.Clear();
}
}