【发布时间】:2021-03-07 08:50:33
【问题描述】:
在 ASP.NET Core MVC 应用程序中,我需要跳过控制器操作中某些复杂属性的模型验证。
假设我有以下模型结构:
public class Person
{
public int PersonID { get; set; }
public PersonalInfo PersonalInfo { get; set; }
public ContactInfo ContactInfo { get; set; }
public Person()
{
PersonalInfo = new PersonalInfo();
ContactInfo = new ContactInfo();
}
}
public class PersonalInfo
{
[Required(ErrorMessage = "First name is required")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Last name is required")]
public string LastName { get; set; }
}
public class ContactInfo
{
[Required(ErrorMessage = "Phone is required")]
public string Phone { get; set; }
[Required(ErrorMessage = "Email is required")]
public string Email{ get; set; }
}
在后期操作中,我想跳过对 ContactInfo 的验证,尽管它是模型的一部分并且已提交。像这样的:
[HttpPost]
public ActionResult SavePerson(Person model)
{
ModelState.Remove("ContactInfo");
if (ModelState.IsValid)
{
(...)
}
}
如果 ContactInfo 是简单的(“标量”是正确的术语吗?)属性,这将起作用。
我知道你们中的一些人会建议我使用单独的视图模型,但我认为它不适用于这种情况(我正在尝试创建一个包含多个步骤的表单,并且所有数据都必须在表单上才能提交以便在步骤之间保留...)
另外,我想我可以为 ContactInfo 类的每个属性使用 ModelState.Remove,但它似乎重复且难以维护,尤其是因为我的类包含更多属性。
【问题讨论】:
标签: c# asp.net-mvc asp.net-core modelstate server-side-validation