猿问

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

我正在为我的项目使用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")

    {


    }


繁华开满天机
浏览 219回答 1
1回答

aluckdog

您希望将User<->之间的关系建模JobExperience为1(必需)<-> 0-N(可选列表)。通过将ApplicationUser标记为,您将无法实现此目的[Required]。而是在中配置多重性约束ModelBuilder并删除[Required]属性。ModelBuilder.Entity<User>()&nbsp; &nbsp;.HasMany(u => u.JobExperiences)&nbsp; &nbsp;.WithRequired(j => j.ApplicationUser)&nbsp; &nbsp;.WillCascadeOnDelete(true);进一步说明,您应该引入ViewModels而不是将实体模型绑定到控制器。这样,您就不会混合用于前端验证的[Required]注释(例如)和用于数据持久化的注释(例如[ForeignKey])。如果User继承自IdentityUser,则还请确保base.OnModelCreating(modelBuilder)在您的ModelBuilder中调用(请参见EntityType'IdentityUserLogin'未定义密钥。为此EntityType定义密钥 )。
随时随地看视频慕课网APP
我要回答