0
我的用户模型是这样的:模型验证和注册
public class User
{
[Key]
[Required]
[StringLength(30, MinimumLength = 3)]
[Display(Name = "Username")]
public String Name { get; set; }
[EmailAddress]
[Required]
[MaxLength(254)]
[Display(Name="Email address")]
public String Email { get; set; }
[Required]
[DataType(DataType.Password)]
[StringLength(20, MinimumLength = 6)]
public String Password { get; set; }
休息是无关紧要的。
我有以下问题:当我尝试在我需要输入一个电子邮件地址,因为它是[Required]
和ModelState.IsValid
将返回false
,如果我不会和登录逻辑将跳过......我不能删除[Required]
堂妹验证记录我需要注册,但我也想让用户只用用户名登录。有没有什么方法让电子邮件只需要注册?如果不是你建议我做什么,请从电子邮件中删除要求?
登录:
if (ModelState.IsValid)
{
if (IsValid(user.Name, user.Password))
{
FormsAuthentication.SetAuthCookie(user.Name, false);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "Login Data is incorrect");
}
}
和注册:
if (ModelState.IsValid)
{
using (var db = new CardContext())
{
var crypto = new SimpleCrypto.PBKDF2();
var encrPass = crypto.Compute(user.Password);
var sysUser = db.Users.Create();
sysUser.Avatar = null;
sysUser.Banned = false;
sysUser.Email = user.Email;
sysUser.Information = "";
sysUser.Name = user.Name;
sysUser.Password = encrPass;
sysUser.Rank = null;
sysUser.Salt = crypto.Salt;
db.Users.Add(sysUser);
db.SaveChanges();
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Registration data is incorrect.");
}
当用户注册时,我将不得不复制从注册模式到登录的所有内容。或仅使用登录模型进行登录验证,并使用其他所有模型的登录模型?这听起来有点奇怪,有2个模型,只有[Register]属性的不同。 – Kmaczek
您在业务层中表示用户的类。我建议不要从View传递值并绑定到此类型的实例,而是使用两个不同的View Model,而不是在它们上具有Validation属性,然后将View Models中的值映射到'User的实例'登录或注册时。不幸的是,数据注解验证属性默认没有上下文的概念,尽管你可以为此写一个自定义属性。 –
好吧,我现在明白了:)这确实是个好主意。 – Kmaczek