注意:这是所有非常简化的代码,用于演示该问题。我的真实代码具有更多控件,客户端验证等。
在名为<form>
的视图中,我有以下Jim.cshtml
(非常简化)...
<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
无效,因此控制器返回带有{模型。验证摘要显示错误消息,但文本框为空。
我希望文本框使用我输入的电子邮件地址填充。
我在做什么错了?
谢谢
答案 0 :(得分:1)
HTML本身不知道如何绑定到模型中的值。您必须明确地执行此操作,或使用asp-for
之类的标签帮助程序。
使用asp-for
:
<input type="text" asp-for="Email">
或明确地:
<input type="text" name="Email" value="@Model.Email">