在ASP.NET MVC中重置密码

时间:2013-04-13 15:38:34

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

我在ASP.NET中实现自己的重置密码。在重置密码时,首先我创建一个随机字符串并将其邮寄给用户email。对于像http://xyz.com/account/forgot?random=xxxx&userid=xx.I这样的电子邮件中的链接创建了一个httpget类型操作忘了哪个show返回一个带有密码输入标签的视图如果验证了randomid和userid 。 但是在httppost类型的忘记中,我对参数感到困惑。 我忘记了模型有2个属性密码和confirmmpassword。如果我只是将forgetmodel传递给httppost动作,那么我无法从数据库查询用户。我想我应该将randomId作为参数传递。但是,我正在获取如何从httpget动作的url中获取randomID (如果我这样做,是否安全?)? 请指导我,我卡住了.. 提前致谢

1 个答案:

答案 0 :(得分:1)

您使用的是Html.BeginForm(“action”,“controller”),如果是这样,那么您将丢失查询字符串参数。由于ForGotPassword(..)的HttpGet和HttpPost方法具有相同的动作名称,您可以使用Html.BeginForm()。 因此,表单会将数据发布到页面网址,您将获得查询字符串。

在你的http post方法中,你可以定义如,

    [HttpPost]
    public ActionResult ForGot(ForgotModel model, string random,strung userid)
    {
     :
     :
    }
  • 如果您不想按照上述方法,那么在httpget方法中写入ViewBag / ViewData并将它们作为隐藏字段放入视图中。然后,您可以将它们作为Method的输入接收。

    [HttpGet]
    public ActionResult ForGot(string random,strung userid)
    {
     ViewBag.Random =random;
     Viewbag.Userid =userid;
     :
     :
    } 
    [HttpPost]
    public ActionResult ForGot(ForgotModel model, string random,strung userid)
    {
     :
     :
    }
    

和,在视图中

@Html.BeginForm("ForGot","Account"){
:
 @Html.Hidden(ViewBag.Random)
 @Html.Hidden(ViewBag.Userid)
:
}