我开发了一个更改密码表单,控制器只有两种方法:
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方法。单击“提交”按钮时调用的POST方法。问题是模型实例不在这两个方法之间共享 - POST方法总是具有empy Guid ConfirmationCode属性。
如何强制ASP.NET使用同一个模型类实例?或者更一般地说,执行以下操作的最佳方法是:用户单击其确认电子邮件中的链接,然后将其重定向到“更改密码”表单,在单击“提交”按钮后,会触发一些操作(保存新密码)到DB等。)
答案 0 :(得分:1)
请确保您拥有此属性 - " Guid代码"在您的PasswordChangeModel中。在您的视图中,您可以使用隐藏字段来保存Guid字符串,如下所示 -
@Html.HiddenFor(x=>x.Code)
在您将模型发布到控制器之后,它将在" Code"中使用Guid字符串。该模型的属性。