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">
注意:这些都是非常简化的代码来演示问题。我的真实代码有更多控件、客户端验证等。
我在名为 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">