ASP.NET POST 后核心未在控件中显示数据,出现验证错误

ASP.NET Core not showing data in controls after POST with validation errors

注意:这些都是非常简化的代码来演示问题。我的真实代码有更多控件、客户端验证等。

我在名为 Jim.cshtml...

的视图中有以下 <form>(非常简化)
<form method="post" asp-controller="Home" asp-action="Jim">
  <div asp-validation-summary="All" class="text-danger"></div>
  <label for="Email">Email</label>
  <input type="text" id="Email" name="Email">
  <div>
    <button type="submit">Submit</button>
  </div>
</form>

以及对应的控制器代码...

public IActionResult Jim() =>
  View();

[HttpPost]
public IActionResult Jim(Jim j) {
  // Silly server-side validation for testing
  if (!j.Email.StartsWith("x")) {
    ModelState.AddModelError("Email","Must start with an 'x'");
  }
  if (!ModelState.IsValid) {
    return View(j);
  }
  return RedirectToAction(nameof(Index));
}

Jim 视图模型如下所示...

public class Jim {
  [Required(ErrorMessage = "Required")]
  public string Email { get; set; } = "";
}

如果我加载页面,输入一个不以"j"开头的电子邮件并点击提交按钮,那么ModelState是无效的,所以控制器returns Jim 与模型一起查看。验证摘要显示错误消息,但文本框为空。

我希望文本框填充我输入的电子邮件地址。

我做错了什么?

谢谢

HTML 本身不知道如何绑定到模型中的值。您必须明确地执行此操作或使用像 asp-for.

这样的标签助手

使用asp-for:

<input type="text" asp-for="Email">

或明确地:

<input type="text" name="Email" value="@Model.Email">