在Actions和应用程序行为之间共享数据

时间:2010-07-22 14:55:52

标签: asp.net-mvc asp.net-mvc-2

这是我的应用程序当前的用户注册工作流程。

  1. 注册表格(GET / register)
  2. 提交表格(邮寄/注册)
  3. 成功后,将路由重定向到“/ registerSuccess”
  4. 在(GET / registerSuccess)视图中,我想显示“ username 已成功注册”的消息。
  5. 控制器操作:

    public ActionResult Register()
    {
        return View();
    }
    
    [HttpPost]
    public ActionResult Register(string name, string password, string confirmPassword)
    {
        TempData["registered_user"] = name;
        return RedirectToRoute("RegisterSuccess");
    }
    
    public ActionResult RegisterSuccess()
    {
        return View();
    }
    

    RegisterSuccess View

    <h2><%: TempData["registered_user"] %> has been registered successfully.</h2>
    

    工作正常,但当用户刷新页面时,用户名为空(GET / registerSuccess)

    在其他应用程序中是否正常?或者我应该为此做点什么? :)(这是我的宠物项目和要求来自我:P

    更新:实际上,还有一个步骤是注册用户需要管理员的批准。因此,我无法让用户在注册成功后登录。我目前正在使用基于cookie的FormsAuthentication来跟踪登录用户。

    我更喜欢使用PRG模式,而不是在提交表单中显示Flash消息。

2 个答案:

答案 0 :(得分:1)

嗯...

通常,您应该考虑一个SSO解决方案,该解决方案包含您的用户身份验证(令牌)。 那么你只需要显示当前经过身份验证的用户(因为完成的注册通常会登录用户)

其他解决方案是,在网址中添加用户,以便成功页面包含所有参数。

/registerSuccess/<username>

(也许检查一下,登录的用户刚刚注册,并且是相同的)

对于你自己有趣的项目,我会做第二个。简直就是这么简单。

答案 1 :(得分:1)

这是正常的行为..当用户'刷新'时,不是通过你的注册函数直接请求页面,所以那时registered_user密钥就消失了。当您进行初始注册时,您应该使用会话标记(例如cookie)来跟踪成功登录的用户。

Using cookies tutorial是一个很好的起点

如果您要使用HTTP身份验证(比如Basic Auth),那么浏览器会向每个发出401 Unauthorized的请求提交用户名和密码(基本身份验证的明文)(请参阅HTTP/1.0 Protocol