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

时间:2019-09-12 13:27:16

标签: c# razor-pages asp.net-core-2.2

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

第1页(带有CompanyId):

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

第2页(无公司编号):

<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>

MyModel:

[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"装饰,因此绑定是可以的。

发布表单时,我检查if (!ModelState.IsValid),如果不是return Page(),则检查。

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

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

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

1 个答案:

答案 0 :(得分:0)

解决方案是执行ViewData.TemplateInfo.HtmlFieldPrefix =“ MyModel”;在局部。