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

时间:2011-03-02 11:32:10

标签: c# .net authentication asp.net-mvc-3

我正在尝试制作一个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>。)

那么有人有任何建议吗?

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

对于RedirectToAction,您需要传递路径的对象和名称:

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

另见"How to RedirectToAction..."

答案 2 :(得分:0)

在完成所有3个步骤之前,您可以使用ViewData或ViewBag对象进行临时存储吗?

答案 3 :(得分:0)

Steve Sanderson's book on MVC 2中,它详细讨论了这个主题,并提供了如何在向导步骤之间来回传递数据的工作示例。

我会买这本书并查看那里的解决方案。

修改

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

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

通过无数线程扫描的人员将直接参考如何解决向导问题。

强调的开发人员试图找到问题的解决方案,很容易忽视和忽视评论。

答案 4 :(得分:-1)

我会将此信息保存在Session对象中。

Session["UserObject"] = MyUserObject

然后用

检索它

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