在 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 字符串。
我开发了一个更改密码表单,控制器只有两种方法:
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 字符串。