繁体   English   中英

使用ASP.NET MVC3处理注册向导的正确方法是什么?

[英]What's the proper way to handle a signup WIZARD with ASP.NET MVC3?

我正在尝试制作一个3页的注册向导,但是我不确定如何在页面之间传递数据。

首先,我尝试使用return RedirectToAction("New", "Authentication", newUser); ,其中newUser是包含初始首页信息(即其OpenId标识符和提供者提供的任何其他元数据)的用户实例。

当我这样做时,我注意到所有数据(存在的)都在查询字符串HEADER中:

Request URL:http://localhost:1200/Account/New?UserId=0&OpenIds=System.Collections.Generic.List%601%5BSystem.String%5D
Request Method:GET
Status Code:200 OK

这让我担心它可能会受到严重的攻击/滥用,尤其是在存在openId标识符的情况下(更不用说OpenId值不正确,它没有正确地序列化IList<string> )。

那么有人有什么建议吗?

我最终使用TempData在请求之间存储数据。 当我需要显示一些错误消息时,我还使用了TempData.Keep()来确保它对另一个错误处理请求的粘性。

对于RedirectToAction您需要传递对象和路由名称:

return RedirectToAction("New", "Authentication", new { id=newUser});

另请参阅“如何重定向到动作...”

在完成所有3个步骤之前,是否可以将ViewData或ViewBag对象用于临时存储?

史蒂夫·桑德森(Steve Sanderson)的有关MVC 2的书中 ,它详细讨论了该主题,并提供了一个有效的示例,说明了如何在向导步骤之间来回传递数据。

我会买书,然后看那里的解决方案。

编辑:

如评论中所述,请阅读第477页第13章中的示例。它涵盖了您的问题。

为什么这是有效的答案,而不是评论?:

通过无数线程进行扫描的人们将找到有关如何解决向导问题的直接参考。

压力很大的开发人员试图找到问题的解决方案时,很容易忽略和忽略注释。

我会将这些信息保留在Session对象中。

Session["UserObject"] = MyUserObject

然后用

var myUser = Session["UserObject"] as MyUserClass;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM