在 Get 和 Post 控制器方法之间共享相同的模型

Sharing the same model between Get and Post conroller methods

我开发了一个更改密码表单,控制器只有两种方法:

public ActionResult ChangePassword(string email, Guid code)
{
    var model = new PasswordChangeModel { Email = email, ConfirmationCode = code };
    return View(model);
}

[HttpPost]
public ActionResult ChangePassword(PasswordChangeModel model)
{
    // use model class
}

此处 GET 方法由确认电子邮件中的直接 link 调用。单击提交按钮时调用 POST 方法。问题是这两种方法之间不共享模型实例——POST 方法总是有 empy Guid ConfirmationCode 属性.

如何强制 ASP.NET 使用模型 class 的相同实例?或者更一般地说,执行以下操作的最佳方法是什么:用户在他的确认电子邮件中单击 link,然后它被重定向到更改密码表单,在他单击提交按钮后,它被触发了一些动作(将新密码保存到数据库等)

请确保您的 PasswordChangeModel 中有此 属性 - "Guid code"。在您看来,您可以有一个隐藏字段来保留如下所示的 Guid 字符串-

@Html.HiddenFor(x=>x.Code)

在您将 post 模型连接到控制器后,它将在模型的 "Code" 属性 中包含 Guid 字符串。