【发布时间】:2021-07-24 16:06:13
【问题描述】:
我正在构建 .Net 5 Razor Pages Web 应用程序并且有一个包含两个对象的结构:
public class Location
{
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
[ForeignKey("Organization")]
public Guid OrganizationId { get; set; }
public Organization Organization { get; set; }
}
public class Organization
{
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
}
以下是我的 Razor 页面中用于编辑位置对象的字段:
<input asp-for="Location.Organization.Id" class="hidden" value="@Model.Location.Organization.Id" />
<input asp-for="Location.Id" class="hidden" value="@Model.Location.Id" />
<input asp-for="Location.Name" class="form-control" value="@Model.Location.Name" />
我在页面上没有组织对象的字段。
在 OnPost() 方法中,我从数据库中填充组织对象并尝试再次验证模型。
Location.Organization = await _db.Organizations.FindAsync(Location.Organization.Id);
if (!TryValidateModel(Location, nameof(Location)))
{
return Page();
}
但它不起作用。模型仍然无效 (ModelState.IsValid != true)
验证错误说应该填写Organization.Name。
但是 Location 对象中的所有字段都正确填写。填充组织对象后,Organization.Name 字段也填充了非空字符串,应该可以通过验证。
我与这个问题斗争了好几个小时,并且已经尝试过其他方式,比如TryValidateModel(Location.Organization)等等。
我正在寻找一种无需在表单中放置Organization.Name 字段的方法。由于我的真实组织对象中有更多其他字段,因此我不想将它们全部放入表单中。我也不想忽略验证错误。
我目前正在尝试了解TryValidateModel() 的工作原理,但从源代码中找出来并不容易。
有解决问题的方法吗?
【问题讨论】:
标签: c# asp.net-core razor-pages