我有,我感觉至少是一个非常简单的忘记密码页面。 我的想法是保留一个整数并对整数进行计数,如果达到阈值,则模型失败。我不明白的是为什么我的 int 在每个帖子上都会变回 0。
这是我的控制器方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ForgetPassword(Models.Portal.ForgetPasswordModel forgetPasswordModel)
{
if (ModelState.IsValid)
{
forgetPasswordModel.isEmail = Helper.Validation.IsValiEmailAddress(forgetPasswordModel.AccountName);
forgetPasswordModel.ForgetAttempt = forgetPasswordModel.ForgetAttempt + 1;
if (forgetPasswordModel.ForgetPasswordReset == Models.Portal.ForgetPasswordReset.Success)
{
return RedirectToAction("ResetPassword", "Portal", new Models.Portal.ResetPasswordModel());
}
else
{
ViewBag.ShowForgetPasswordError = true;
}
}
return View(forgetPasswordModel);
}
这是我的看法
@model AuthFrameworkMVCSite.Models.Portal.ForgetPasswordModel
@{
ViewBag.Title = "View";
Layout = "~/Views/Shared/_LayoutAuthFramework.cshtml";
}
@using (Html.BeginForm("ForgetPassword", "Portal", FormMethod.Post))
{
@Html.AntiForgeryToken()
<h2>Username/Email Address</h2>
@Html.TextBoxFor(m => m.AccountName)
<br />
<br />
<input type="submit" value="Reset Password" />
if (ViewBag.ShowForgetPasswordError == true)
{
<div class="col-lg-offset-3 col-lg-6">
Something went wrong. Please try again.
</div>
}
}
<div id="loader" style="display:none">
Loading...
</div>
这是我的模型:
public class ForgetPasswordModel
{
[Required]
public string AccountName { get; set; }
public bool isEmail { get; set; }
public ForgetPasswordReset ForgetPasswordReset { get; set; }
[Range(0, 5)]
public int ForgetAttempt { get; set; }
}
public enum ForgetPasswordReset
{
Failure,
Success
}
如有任何帮助,我们将不胜感激。我在增加值后传回模型。
向页面添加
@Html.HiddenFor(model => model.ForgotAttempt)
。
使用 MVC 时,一个重要因素是“模型”被发送到视图引擎以组成发送到浏览器的 HTML。它不会转到浏览器。当您使用表单 POST 格式化从浏览器返回控制器的调用时。发送回的内容是从页面中的输入控件解析的内容。发送回的是请求正文中的基本名称-值数据,MVC 将其填充到任何类声明中,或者它在请求的方法中找到的参数中。如果 POST 数据不包含对象或参数中每个属性的值,则这些值将保留为默认值。