我正在使用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个键(需要名字,姓氏等)。
答案 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);
}
}