ModelState 错误不会以部分视图形式显示
Posted
技术标签:
【中文标题】ModelState 错误不会以部分视图形式显示【英文标题】:ModelState errors don't show in partial view form 【发布时间】:2020-01-14 09:29:12 【问题描述】:我在局部视图中有一部分表单。该表单部分可在不同页面中重复使用:
第 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
-values 在那里,input
-fields 用data-val="true" data-val-required="Required"
装饰,所以绑定是好的。
当我发布表单时,我会检查if (!ModelState.IsValid)
,如果不是return Page()
。
结果是,如果 FirstName 或 LastName 为空,则 ModelState 无效,但不显示验证消息。
如果我将表单标签移动到部分视图(这意味着我不能保留 CompanyId 字段,因为它只能在单个页面上使用),则会显示验证错误。
有没有办法解决这个问题?
【问题讨论】:
表单属性中指定的动作名称在哪里? 检查呈现的 html 中呈现的控件名称属性值,是实际名称还是附加部分视图名称的实际名称。 Model Binder 用模型属性准确检查控件的 name 属性值,两者应该匹配。 @NomiAli 没有,意味着它被提交到同一个页面(它是 Razor 页面:OnGet() / OnPost()) 将<partial name="_partialForm" model="Model.MyModel" />
更改为<partial name="_partialForm" model="@Model.MyModel" />
。
【参考方案1】:
解决方案是 ViewData.TemplateInfo.HtmlFieldPrefix = "MyModel";在部分。
【讨论】:
以上是关于ModelState 错误不会以部分视图形式显示的主要内容,如果未能解决你的问题,请参考以下文章
Modelstate.addmodelerror 未显示在 PartialView 中