2011-11-02 61 views
0

我正在学习NHibernate/MVC并创建一个示例应用程序,让用户存储他们自己的书籍列表。我遇到的问题是我的存储库需要当前的登录用户,但我不知道MVC Session中保留用户详细信息的最佳方式。我正在使用表单身份验证。NHibernate和MVC实例变量

登录页面

var user = userRepository.login(username,password); 

Session["user"] = user; 

列表页

var user = Session["user"] as user; 

var books = bookRepository.getByGenre("Fiction",user); 

这是通过每个HTTP请求之间的实例变量的建议呢?

感谢

回答

0

史蒂夫·桑德森MVC书状态

在ASP.NET MVC中最好的一种操作方法是 其参数的纯函数。我的意思是操作方法只从其参数中读取数据 ,并将数据仅写入其参数,并且 不参考HttpContext或Session或 控制器外部的任何其他状态。

我相信推荐的方法是使用自定义模型联编程序,从后台存储提供您的用户ID。模型联编程序允许您创建一个不关心数据来自何处的控制器。

一个良好的开始是这个职位

modelbinder-for-an-object-stored-in-session

+0

所以在MVC的每一个动作都会有另外一个参数是当前用户?拥有一个全局属性让控件可以访问用户对象会不会更容易? – bob223

+0

更容易是的,推荐no。我相信从控制器中提取会话数据的想法是允许可扩展性,并消除控制器在设置全局变量时需要做的任何假设。它还避免了在任何单元测试中模拟http会话的需要。 – fluent