Asp.net mvc 4 表单验证失败时如何重新填充视图?

Asp.net mvc 4 表单验证失败时如何重新填充视图?,asp.net-mvc-4,asp.net-mvc-5,Asp.net Mvc 4,Asp.net Mvc 5,我有以下代码。这是一个简单的形式。如果验证失败,用户输入的内容仍将显示在表单中。这是怎么做到的?在控制器中,我所做的只是返回一个View(),而不是将模型传递给它。它工作得很好,但我需要澄清它工作的原因 这是控制器 [HttpGet] public ViewResult RsvpForm() { return View(); } [HttpPost] public ViewResult RsvpForm(GuestResponse guestResponse) { if (Mo

我有以下代码。这是一个简单的形式。如果验证失败,用户输入的内容仍将显示在表单中。这是怎么做到的?在控制器中,我所做的只是返回一个View(),而不是将模型传递给它。它工作得很好,但我需要澄清它工作的原因

这是控制器

[HttpGet]
public ViewResult RsvpForm()
{
    return View();
}

[HttpPost]
public ViewResult RsvpForm(GuestResponse guestResponse)
{
    if (ModelState.IsValid)
    { 
        return View("Thanks", guestResponse); 
    }
    else
    {
        return View();
    }

}
视图是RsvpForm

@model PartyInvites.Models.GuestResponse

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>RsvpForm</title>
</head>
<body>
   @using (Html.BeginForm())
   {
       @Html.ValidationSummary()
       <p>Your name: @Html.TextBoxFor(x=>x.Name)</p>
       <p>Your email: @Html.TextBoxFor(x=>x.Email)</p>
       <p>Your phone: @Html.TextBoxFor(x=>x.Phone)</p>
       <p>
           Will you attend?
           @Html.DropDownListFor(x => x.WillAttend,new[] { 
          new SelectListItem() { Text = "Yes, I'll be there", Value = bool.TrueString},
          new SelectListItem() { Text = "No, I can't come", Value = bool.FalseString}}, "Choose an option")

       </p>

       <input type="submit" value="Submit RSVP" />



   }
</body>
</html>
@model PartyInvites.Models.GuestResponse
@{
布局=空;
}
RsvpForm
@使用(Html.BeginForm())
{
@Html.ValidationSummary()
您的姓名:@Html.TextBoxFor(x=>x.name)

您的电子邮件:@Html.TextBoxFor(x=>x.email)

您的手机:@Html.TextBoxFor(x=>x.phone)

你会参加吗? @Html.DropDownListFor(x=>x.willattain,new[]{ 新建SelectListItem(){Text=“是的,我会在那里”,Value=bool.TrueString}, 新建SelectListItem(){Text=“不,我不能来”,Value=bool.FalseString},“选择一个选项”)

}
ASP.NET MVC假定,如果您正在渲染视图以响应 HTTP POST,并且您正在使用Html帮助程序,那么您很可能 重新显示未通过验证的窗体


您可以在此处阅读更多详细信息:

@TrueBlueAussie谢谢:)