【发布时间】: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" />。
标签: c# razor-pages asp.net-core-2.2