所以我在我的项目中需要为实体框架的MVC 3应用程序实现用户注册系统。
我有以下实体作为注册的一部分填写/需要填写:
旧的应用程序(我们称之为v1)使用类来处理注册过程以包含所有数据,然后在注册的每个步骤之后将类保存到会话
我刚刚用MVC3 / EF4.1弄湿了脚。我最初的信息搜索让我看到了一个存储库,以及处理这个问题的工作单元模式。但是,我看到一些消息来源说MVC3 / Ef4.1并不真正需要存储库模式。
所以我的问题是这个。我是否像在v1中那样创建用户注册,并且保存到会话的类现在在技术上是一个存储库,或者是否有更好的方法来利用MVC3 / EF4.1来处理使用跨越多个页面的流来注册新用户/视图。
答案 0 :(得分:3)
我们的MVC3注册涵盖多个页面浏览(渐进式披露)与类似实体(用户/人/角色/与企业的关联)。我不确定你是否完全掌握了Repository或UnitOfWork模式。这些是与持久性相关的模式,并不与会话有任何关系,会话是HTTP状态管理机制。
我建议您在每个页面视图的末尾(当用户提交表单时)写入数据库,而不是在会话中累积所有数据。如果需要在链中将信息从一个视图传递到另一个视图,则可以使用控制器的TempData字典来存储实体键(TempData实际上在后台使用Session)。
如果用户未完成所有注册步骤,则使用此方法可能会导致数据库中的信息不完整。但是,它允许您让他们继续注册过程,而不必重新输入信息。然而,如果您正在使用会话,并且您的用户意外关闭了他们的浏览器窗口,那么所有会话数据都将丢失,并且用户将不得不重新开始。
我们所做的就是收集用户&密码第一。流程如下:
如果用户只完成了这些步骤的子集,我们可以使用数据库信息确定注册过程中的下一步,并将其汇总到该视图中,直到注册过程完成。
答案 1 :(得分:1)
评论回复中的字符用尽了。我能做这样的事吗?
[HttpGet]
public ActionResult UserInfo(RegistrationViewModel model)
{
return View(model);
}
[HttpPost]
public ActionResult UserInfo(RegistrationViewModel model)
{
return View("BusinessInfo",model);
}
[HttpGet]
public ActionResult BusinessInfo(RegistrationViewModel model)
{
return View(model);
}
[HttpPost]
public ActionResult BusinessInfo(RegistrationViewModel model)
{
return View("LicenseAgreement",model);
}
[HttpGet]
public ActionResult LicenseAgreement(RegistrationViewModel model)
{
return View();
}