ModelState 错误不以部分视图形式显示

ModelState errors don't show in partial view form

我在局部视图中有一个表单的一部分。该表单部分可在不同页面中重复使用:

第 1 页(带 CompanyId):

<form method="post">
    <partial name="_partialForm" model="Model.MyModel" />
    <input asp-for="CompanyId />
    <input type="submit" />
</form>

第 2 页(无 CompanyId):

<form method="post">
    <partial name="_partialForm" model="Model.MyModel" />
    <input type="submit" />
</form>

_partialForm:

@model Models.MyModel

<label asp-for="FirstName"></label>
<input asp-for="FirstName />
<span asp-validation-for="FirstName"></span>
<label asp-for="LastName"></label>
<input asp-for="LastName />
<span asp-validation-for="LastName"></span>

我的模型:

[Required]
[DisplayName("First name")]
public string FirstName { get; set; }
[Required]
[DisplayName("Last name")]
public string LastName { get; set; }
public Guid? CompanyId { get; set; }

当我查看呈现页面的源代码时,label asp-for 值在那里,input 字段用 data-val="true" data-val-required="Required" 修饰,因此绑定正常。

当我 post 表单时,我检查 if (!ModelState.IsValid) 如果没有 return Page()

结果是,如果 FirstName 或 LastName 为空,则 ModelState 无效,但不会显示任何验证消息。

如果我将表单标签移动到部分视图(这意味着我不能保留 CompanyId 字段,因为它只能在单个页面上可用),则会显示验证错误。

有什么办法可以解决这个问题吗?

解决方案是 ViewData.TemplateInfo.HtmlFieldPrefix = "MyModel";在部分。