为了账号安全,请及时绑定邮箱和手机立即绑定

ModelState.isValid()== False +必填符号

ModelState.isValid()== False +必填符号

C#
繁华开满天机 2021-04-07 13:11:50
我正在为我的项目使用Identity框架,JobExperience并向User类添加了一些属性。用户应该有加入的可能性,JobExperience他们的User。自然地,这意味着aJobExperience不能不存在而存在User。因此,我在JobExperience课堂上使用[Required]表示法JobExperience类public class JobExperience{    public int JobExperienceId { get; set; }    public string Employer { get; set; }    public DateTime? DateOfEmployment { get; set; }    public DateTime? DateOfExit { get; set; }    public ICollection<Subject> Subjects { get; set; }    [Required]    public virtual User ApplicationUser { get; set; }}用户类别public class User : IdentityUser{    public Boolean Available { get; set; }    public Boolean ActivelySeeking { get; set; }    public Boolean AcceptedUseOfData { get; set; }    public int ExpectedHourlySalary { get; set;}    public Boolean Gender { get; set;}    public DateTime? DateOfBirth { get; set; }    public String FirstName { get; set; }    public string LastName { get; set; }    public ICollection<JobExperience> JobExperiences { get; set; }    public ICollection<Language> Languages { get; set; }    public ICollection<Certificate> Certificates { get; set; }}脚手架JobExperienceController-创建方法[HttpPost][ValidateAntiForgeryToken]public ActionResult Create([Bind(Include = "JobExperienceId,Employer,DateOfEmployment,DateOfExit")] JobExperience jobExperience){    var UserId = User.Identity.GetUserId();    jobExperience.ApplicationUser = db.Users.Where(x => x.Id == UserId).First();    if (ModelState.IsValid)    {       db.JobExperiences.Add(jobExperience);       db.SaveChanges();       return RedirectToAction("Index");    }    return View(jobExperience);}添加了Required-notation后,create方法中的modelstate.isValid()返回false。我猜想它需要收到用户的参考,但我不知道如何去做。当前尝试是所示的LINQ表达式。ApplicationUserDb public class ApplicationUserDb : IdentityDbContext<User>{    public virtual DbSet<JobExperience> JobExperiences { get; set; }    public virtual DbSet<Language> Languages { get; set; }    public virtual DbSet<Certificate> Certificates { get; set; }    public ApplicationUserDb() : base("DefaultConnection")    {    }
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

您希望将User<->之间的关系建模JobExperience为1(必需)<-> 0-N(可选列表)。通过将ApplicationUser标记为,您将无法实现此目的[Required]。而是在中配置多重性约束ModelBuilder并删除[Required]属性。


ModelBuilder.Entity<User>()

   .HasMany(u => u.JobExperiences)

   .WithRequired(j => j.ApplicationUser)

   .WillCascadeOnDelete(true);


进一步说明,您应该引入ViewModels而不是将实体模型绑定到控制器。这样,您就不会混合用于前端验证的[Required]注释(例如)和用于数据持久化的注释(例如[ForeignKey])。


如果User继承自IdentityUser,则还请确保base.OnModelCreating(modelBuilder)在您的ModelBuilder中调用(请参见EntityType'IdentityUserLogin'未定义密钥。为此EntityType定义密钥 )。


查看完整回答
反对 回复 2021-04-24
  • 1 回答
  • 0 关注
  • 218 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信