MVC4实体框架6模型状态验证问题

时间:2014-04-07 14:35:30

标签: entity-framework asp.net-mvc-4 ef-code-first

我正在使用EF6项目开发MVC4,并遇到了一个稍小但令人沮丧的问题。我有一种情况,我在我的dbcontext中设置了[Required]属性,但是,我确实希望允许所述属性使用空字符串。

我尝试了本文{@ 3}}中的建议,并将[DisplayFormat(ConvertEmptyStringToNull = false)]放在我的上下文属性上。

当我从登录页面发帖时,名字,姓氏,电子邮件,电话属性为空,这使ModelState失败,即使我已将其设置为允许这些属性为空字符串。我错过了什么吗?

模型/ DBContext

public class User : Entity
{
    [StringLength(200)]
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    [Required]
    public String UserName { get; set; }

    [StringLength(250)]
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    [Required]
    public String Password { get; set; }

    [StringLength(200)]
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    [Required]
    public String FirstName { get; set; }

    [StringLength(200)]
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    [Required]
    public String LastName { get; set; }

    [StringLength(200)]
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    [Required]
    public String Email { get; set; }

    [StringLength(200)]
    [DisplayFormat(ConvertEmptyStringToNull = false)]
    [Required]
    public String Phone { get; set; }
}

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(UserViewModel Model)
{
    var _UM = Model.User;
    var User = _repo.GetSingle<User>(x => x.UserName == _UM.UserName);

    if(User != null)
    {
        if (Hash.ValidatePassword(_UM.Password, User.Password))
        {
            return RedirectToAction("Dashboard");
        }
        else
        {
            ModelState.AddModelError("InvalidPass", "Invalid Credentials");
         }
    }
    else
    {
        ModelState.AddModelError("NoUser", "Invalid Credentials");
    }

    return View(Model);
}

如果设置了无效凭据,我希望ModelState键只有一个我明确设置的项目。但是,它有6个键(需要名字,姓氏等)。

1 个答案:

答案 0 :(得分:1)

我最后通过移动我的EF上下文配置来使用Fluent API而不是Data Annotations来解决这个问题。

模型/ DBContext

public class User : Entity
{
    public String UserName { get; set; }

    public String Password { get; set; }

    public String FirstName { get; set; }

    public String LastName { get; set; }

    public String Email { get; set; }

    public String Phone { get; set; }
}

DBContext文件

public class DBContext : DbContext
{

    public DBContext()
        : base("ConString")
    {

    }

    public DbSet<User> Users { get; set; }

    public DbSet<UserRole> UserRoles { get; set; }

    public DbSet<Region> Regions { get; set; }

    public DbSet<InboundFile> InboundFiles { get; set; }

    public DbSet<FileType> FileTypes { get; set; }


    //configure objects 
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<User>().Property(x => x.FirstName).IsRequired().HasMaxLength(200);
        modelBuilder.Entity<User>().Property(x => x.LastName).IsRequired().HasMaxLength(200);
        modelBuilder.Entity<User>().Property(x => x.Phone).IsRequired().HasMaxLength(200);
        modelBuilder.Entity<User>().Property(x => x.Email).IsRequired().HasMaxLength(200);
        modelBuilder.Entity<User>().Property(x => x.UserName).IsRequired().HasMaxLength(200);
        modelBuilder.Entity<User>().Property(x => x.Password).IsRequired().HasMaxLength(200);


    }

}