1

我有一个要传入 url 的参数。当用户单击 URL 时,他们将被带到允许他们输入其他信息的站点。(密码重置)我需要将我传递的令牌作为 url 的一部分并将其放入我提交给另一个控制器的模型中,该控制器验证令牌和密码并在验证后重置密码。我不知道如何在模型中获取传递的参数。

我的控制器:

[AllowAnonymous]
public ActionResult TokenPasswordReset(string token)
{
   return View();
}

我生成的网址是

http://localhost:53272/Account/TokenPasswordReset?wzBXjkT1Y8qmWIECwSIFYQ2

在我看来,我尝试设置隐藏模型值。

<fieldset>
        <legend>Reset Password Form</legend>
        <ol>
            <li>
                @Html.LabelFor(m => m.NewPassword)
                @Html.PasswordFor(m => m.NewPassword)
            </li>
            <li>
                @Html.LabelFor(m => m.ConfirmPassword)
                @Html.PasswordFor(m => m.ConfirmPassword)
            </li>
        </ol>
        @Html.HiddenFor(model.UserToken = Request.Params["token"])
        <input type="submit" value="TokenPasswordReset" />
    </fieldset>

密码和确认密码都可以。我不知道如何从 url 中提取令牌并将其放入 model.UserToken 中。当我这样做时,我收到一条错误消息

当前上下文中不存在名称“模型”

编辑:当我按照下面的建议更改为模型时,我收到一个新错误。由于某种原因,它不会在 HiddenFor 中选择模型。

4

3 回答 3

2

详细信息:在 ViewData 中添加您的令牌,以便您可以在视图中访问它。

解决方案:

在你的控制器中

[AllowAnonymous]
public ActionResult TokenPasswordReset(string token)
{
   ViewData["Token"] = token;

   return View();
}

在你看来

@Html.Hidden("Token", ViewData["Token"])

更新完成问题

在您的发布方法中

[HttpPost]
public ActionResult TokenPasswordReset(YourModel yourModel, string Token)
{
   yourModel.Token = Token;
   rest of your code....
}
于 2012-10-17T22:08:45.090 回答
2

Model,不是model

但是,即使这样,它仍然无法正常工作。请注意您的网址没有令牌查询字符串?它只是 ?gibberish 而不是 ?token=gibberish。

此外,如果您想将其作为模型项传递,则必须为其创建模型:

public class TokenModel {
    public string Token {get;set;}
}

然后在你的控制器中:

return View(new TokenModel() { Token = token });
于 2012-10-17T23:48:41.690 回答
1

感谢@Mystere Man 和@MVCKarl。我能够从他们的答案中提取部分内容并解决我的问题。MVCKarls 解决方案似乎可行,我只是不想使用 ViewData。我生成的网址是这样的。

http://localhost:53272/Account/TokenPasswordReset?Token=LW6lnVrdUXemBMYqluAbMA2

在我看来,我将隐藏字段更改为此。

@Html.Hidden("UserToken", Request.Params["token"])

这允许我将它提交给我的控制器,只传递模型,我只需要验证模型。

再次感谢...

于 2012-10-18T20:11:26.897 回答