我是一个新的 ASP MVC 学习者,我正在研究一小部分并卡住了。场景是用户正在创建新帐户,其中 accountID 由 SQL 自动创建。我想将此 ID 传递给下一步,让用户输入姓名和地址。对于这种情况,我将如何传递此 ID 或任何解决方案?考虑通过 TempData 或 Session 传递数据,但我不确定。
4 回答
我认为你正在错误地处理这个问题。您应该先让用户填写所有信息,然后进行所有注册,包括创建用户和存储来自各个步骤的数据。
如果你按照你建议的方式做事,你最终会得到部分注册用户。他们将创建一个帐户,然后可能会关闭他们的浏览器,并且永远不会完成其余的工作。您现在必须编写额外的代码来在他们每次登录时检查所有这些。
最好让您的注册过程一次完成所有这些过程,作为一个全有或全无的过程。
TempData
将保存数据,直到您的后续请求结束。
还有ViewBag
/ ViewData
,它们实际上是同一个字典,持续时间较短,它们只持续到当前请求结束。
Session
只要用户的会话打开,就会持续。
我相信TempData
符合您的要求,如果“下一步”意味着将数据传递到后续视图,但如果您需要数据更持久,Session
那么就是要走的路。
只需使用与登录表单相同的流程即可。如果用户已经在数据库中输入,您不妨将他们视为尚未完全填写个人资料的登录用户。
在 ASP.NET MVC 中,这在很多情况下可以通过将 Forms Authentication cookie 设置为新注册的用户名来解决
FormsAuthentication.SetAuthCookie(newUser.Logon, false);
我认为将用户 ID 存储在TempData
orSession
是错误的范围。出于所有正常目的,刚注册到您网站的用户在将记录插入用户数据库后可以被视为已登录。
您可以尝试这种方式 - 创建用户(用户名和密码将是您表单中的值):
WebSecurity.CreateUserAndAccount(username, password);
然后这样做:
int userID = 0;
userID = WebSecurity.GetUserId(username);
希望有帮助。