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

时间:2015-03-02 10:19:14

标签: asp.net asp.net-mvc asp.net-mvc-4

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

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等。)

1 个答案:

答案 0 :(得分:1)

请确保您拥有此属性 - " Guid代码"在您的PasswordChangeModel中。在您的视图中,您可以使用隐藏字段来保存Guid字符串,如下所示 -

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

在您将模型发布到控制器之后,它将在" Code"中使用Guid字符串。该模型的属性。