我遇到了一个我似乎无法解决的问题。我正在使用 Razor Pages 并且有两个可以绑定的对象。
[BindProperty]
public MeetingMinuteInputDto MeetingToCreate { get; set; }
[BindProperty]
public MeetingMinuteUpdateDto MeetingToUpdate { get; set; }
以上两个是用于在我的数据库中创建/更新基本实体的单独 dto。我有两个单独的 dto,因为我只允许更新特定项目(以防止过度发布)。两个类都有Name,Date和Reminder. MeetingMinuteUpdateDto唯一允许Date更改的。
Name属性是必需的,不能为空。我在同一个页面/控制器中拥有两个对象的原因是因为我使用模式来创建/更新,我宁愿不创建多个页面只是为了创建/编辑对象。
我有两种用户可以填写的表格——一种用于编辑,另一种用于创建。每一个都将值绑定到一个特定的对象(即创建表单会将其发布的表单值绑定到MeetingMinuteInputDto)。
<div class="form-group">
<div class="col-md-10">
<label asp-for="MeetingToCreate.Name" class="control-label"></label>
<input asp-for="MeetingToCreate.Name" class="form-control" />
<span asp-validation-for="MeetingToCreate.Name" class="text-danger"></span>
</div>
</div>
以上是我创建新会议的表单示例。我检查了提交表单时,只有MeetingMinuteInputDto值被绑定到。另一个对象 ( MeetingMinuteUpdateDto) 的所有属性都具有空值。
但是当我检查模型状态时,MVC 会在“名称”属性上抛出一个错误,说它为空。我查看了模型状态的结果,并且有一个名为“Name”的键,它与任何未通过验证的对象无关。
如果我从页面中删除另一个对象(即我删除MeetingMinuteUpdateDto)并进行模型绑定,则一切正常。如何防止模型验证尝试验证与当前操作无关的对象?我希望 Create 操作仅验证创建对象,反之亦然。
我试过这样做TryValidateModel(MeetingToCreate),但这也为模型验证提供了错误。

注意:我不能只将对象属性放在外面,因为我有其他页面需要这样做,其中更新/创建对象有 10 多个共享/不共享的属性。
更新- 我可以手动从模型状态字典中删除验证错误。但我不太喜欢这种方法,因为我不想遍历所有不正确键的属性并删除它们。
一只萌萌小番薯
胡说叔叔
慕工程0101907
随时随地看视频慕课网APP
相关分类