以下是我的用户模型类,
public class User
{
[System.ComponentModel.DataAnnotations.Key]
public int UserId { get; set; }
public Int16 RoleID { get; set; }
[DisplayName("First Name :")]
public string FirstName { get; set; }
[DisplayName("Last Name :")]
public string LastName { get; set; }
[DisplayName("Email :")]
[Required(ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
[DataType(DataType.Password)]
[Required(ErrorMessage = "Password is required")]
[DisplayName("Password :")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Compare("Password")]
[Required(ErrorMessage = "Confirm password is required")]
[DisplayName("Confirm Password :")]
public string CPassword { get; set; }
}
以下代码在 AccountController
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(User model, string returnUrl)
{
if(ModelState.IsValid) //This turns out to be always false
}
这转到 Login.cshtml
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset class="cf addForm">
@Html.LabelFor(model => model.Email)
@Html.TextBoxFor(model => model.Email, new { @class = "wd293 inputtext" })
@Html.ValidationMessageFor(model => model.Email)
@Html.LabelFor(model => model.Password)
@Html.PasswordFor(model => model.Password, new { @class = "wd293 inputtext" })
@Html.ValidationMessageFor(model => model.Password)
<div class="cf signBtn">
<input type="submit" value="Sign in" class="pageBtn alignleft savebtn" />
</div>
</fieldset>
}
上面的模型类应该适用于注册表单,即需要所有详细信息的地方,例如电子邮件/密码/确认密码
但是对于只需要电子邮件和密码字段的登录表单,因此在这种情况下 ModelState.IsValid 总是给出错误的。
我处于两难境地,应该是什么解决方案,创建另一个模型类?就像登录表单一样,会有另一个模型 UserLoginViewModel 它只有 2 个属性电子邮件/密码,而注册表单 UserRegisterViewModel 将具有所有必需的属性?
请耐心等待,如果这听起来很愚蠢,因为我对 MVC4 还很陌生。如果还需要更多代码,请告诉我。
编辑
public class MyDBContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Category> Categories { get; set; } // It has CategoryID,CategoryName properties
}
以上是我的数据库上下文类,为了在数据库中保存类别,我编写了以下代码,
new MyDBContext().Categories.Add(category);
因此,假设我创建了UserRegisterViewModel
具有注册表所需的所有属性的新类,在这种情况下,我需要再次将此 UserRegisterViewModel 转换为 User,这样可以吗?还是会增加内存开销?
转换就像
User newUser = new User(); //Assign all the properties from UserRegisterViewModel to this and save
new MyDBContext().Users.Add(newUser);
请帮忙。