我正在尝试制作一个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>
。)
那么有人有任何建议吗?
答案 0 :(得分:1)
我最终使用TempData
在请求之间存储数据。当我需要显示一些错误消息时,我还使用TempData.Keep()
确保它对于另外一个错误处理请求是粘性的。
答案 1 :(得分:0)
对于RedirectToAction
,您需要传递路径的对象和名称:
return RedirectToAction("New", "Authentication", new { id=newUser});
答案 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;