mvc 数据注释导致模型无效

Posted

技术标签:

【中文标题】mvc 数据注释导致模型无效【英文标题】:mvc data annotation causing model to go invalid 【发布时间】:2015-08-05 13:16:32 【问题描述】:

我有一个班级UserUtil,我添加了一些数据注释。这会影响我的登录,导致我的模型无效。

public partial class UserUtil

    public int cod_ap  get; set; 

    [Required]
    [DisplayName("User Name")]
    public string UserName  get; set; 

    [DisplayName("User Password")]
    [Required]
    public string UserPassword  get; set; 

    [DisplayName("User Email")]
    [Required]
    public string UserEmail  get; set; 

    public virtual ContorUtil ContorUtil  get; set; 

这是我的登录方法。模型状态无效

public ActionResult LogIn(Models.Entity.UserUtil utilizator)

    if (ModelState.IsValid)
    
        var v = db.UserUtils.Where(a => a.UserEmail.Equals(utilizator.UserEmail) && a.UserPassword.Equals(utilizator.UserPassword)).FirstOrDefault();
        if (v != null)
        
            Session["LoggedUsername"] = v.UserEmail.ToString();
            Session["cod_ap"] = v.cod_ap.ToString();
            //Session["LoggedUserPassword"] = v.UserPassword.ToString();

            if (Session["cod_ap"].ToString() == "11111")
            
                return RedirectToAction("AdminLogin");
            
            else
            
                return RedirectToAction("AfterLogin");
            

        
    
    return View();

【问题讨论】:

问题是登录时我只使用了 UserEmail 和 UserPassword 类的 2 个成员,并且模型无效,因为另一个是 null...但是如何解决这个问题? 【参考方案1】:

我假设UserUtil 是一个实体类。您需要创建一个仅具有UserEmailUserPassword 属性的单独视图模型类,然后在您的视图中使用该视图模型。假设它被命名为 LoginModel

public class LoginModel

    [DisplayName("User Email")]
    [Required]
    public string UserEmail  get; set; 

    [DisplayName("User Password")]
    [Required]
    public string UserPassword  get; set; 

在你的视图代码的顶部添加这个

@model LoginModel

并将您的控制器代码更改为以下

public ActionResult LogIn(LoginModel utilizator)

    if (ModelState.IsValid)
    
        var v = db.UserUtils.Where(a => a.UserEmail.Equals(utilizator.UserEmail) && a.UserPassword.Equals(utilizator.UserPassword)).FirstOrDefault();
        if (v != null)
        
            Session["LoggedUsername"] = v.UserEmail.ToString();
            Session["cod_ap"] = v.cod_ap.ToString();
            //Session["LoggedUserPassword"] = v.UserPassword.ToString();

            if (Session["cod_ap"].ToString() == "11111")
            
                return RedirectToAction("AdminLogin");
            
            else
            
                return RedirectToAction("AfterLogin");
            

        
    
    return View();

【讨论】:

以上是关于mvc 数据注释导致模型无效的主要内容,如果未能解决你的问题,请参考以下文章

未验证 ASP.NET MVC5 模型

使用数据注释的 mvc 模型中的默认值

.NET MVC 模型注释属性 及 FluentApi

如何使用数据注释为模型属性 WebApi .NET Core 添加布尔验证

EF生成实体自动添加数据库字段注释

在 MVC 之外使用 ASP.Net MVC 数据注释