我有一个现有的asp.net核心剃刀页面,为我们的安全团队记录事件。他们也想记录失物招领事件,但将它们与安全事件分开保存。我想重用相同的数据库表并区分记录(AppType)。虽然这两个应用程序有许多相似之处,但Lost and Found并不使用所有相同的属性(即L&F不会使用SubjectDOB,但在安全模型中是必需的。这将导致(!ModelState.IsValid)返回false。对于仅用于我需要的属性的失物招领,重用SecurityLog模型的最佳方式是什么?也许我需要把班级分开?
public class SecurityLog
{
public string AppType { get; set; }
[Required]
[Display(Name = "Subject's First Name")]
public string SubjectFirst { get; set; }
[Required]
[Display(Name = "Subject's Last Name")]
public string SubjectLast { get; set; }
[Required]
[Display(Name = "Subject's B#/DOB")]
public string SubjectDOB { get; set; }
[Display(Name = "Entered By")]
public string EnteredBy { get; set; }
etc...
}我已经尝试从模型中删除subjectDOB,但这不起作用b/c它是必需的。
public async Task<IActionResult> OnPostAsync()
{
ModelState.Remove("SubjectDOB");
if (!ModelState.IsValid)
{
return Page();
}
}发布于 2021-06-30 16:17:24
ModelState.Remove(keyname);应该能像预期的那样工作。确保密钥名称正确。
下面是一个您可以参考的示例:
Index.cshtml:
@page
@model IndexModel
<form method="post">
<input asp-for="SecurityLog.EnteredBy" />
<input asp-for="SecurityLog.SubjectFirst" />
<input asp-for="SecurityLog.SubjectLast" />
<input asp-for="SecurityLog.SubjectDOB" />
<input type="submit" />
</form> Index.cshtml.cs:
public class IndexModel : PageModel
{
public SecurityLog SecurityLog { get; set; }
public async Task<IActionResult> OnPostAsync([Bind(Prefix = "SecurityLog")]SecurityLog model)
{
ModelState.Remove("SecurityLog.SubjectDOB");
if (!ModelState.IsValid)
{
return Page();
}
return Page();
}
public async Task<IActionResult> OnGetAsync()
{
return Page();
}
}发布于 2021-06-30 16:24:32
抽象可用于将所有基本属性提取到单独的可重用类中。
public class BaseSecurityLog
{
public string AppType { get; set; }
[Required]
[Display(Name = "Subject's First Name")]
public string SubjectFirst { get; set; }
[Required]
[Display(Name = "Subject's Last Name")]
public string SubjectLast { get; set; }
[Display(Name = "Entered By")]
public string EnteredBy { get; set; }
}
public class SecurityLog : BaseSecurityLog
{
[Required]
[Display(Name = "Subject's B#/DOB")]
public string SubjectDOB { get; set; }
}https://stackoverflow.com/questions/68182105
复制相似问题