传递到字典中的模型项的类型是' System.Collections.Generic.List`1 [Something.Models.Logins]'

时间:2016-05-26 12:36:37

标签: asp.net-mvc asp.net-mvc-4

我的ASP.NET MVC4项目有问题。

我为我的登录系统创建了一个创建页面/注册页面。但是当我创建帐户时,它给了我这个错误:

  

传递到字典中的模型项的类型为' System.Collections.Generic.List`1 [Something.Models.Logins]',但此字典需要类型为&#39的模型项; Something.Models.Logins'

我在Stackoverflow上看了一下,发现了一些修复但是它们不能用于我的应用程序。

以下是我认为需要帮助的代码;

我的控制器:

[HttpPost]
public ActionResult Login(Models.Logins user)
{
    if (ModelState.IsValid)
    {
        if (user.IsValid(user.Username, user.Password))
        {
            FormsAuthentication.SetAuthCookie(user.Username, user.RememberMe);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            ModelState.AddModelError("", "Login gegevens kloppen niet!");
        }
    }
    return View(user);
}

型号:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Web;

namespace RTApplicatie.Models
{
    public class Logins
    {
        [Required]
        public int ID { get; set; }

        [Required]
        [Display(Name = "User name")]
        public string Username { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [Display(Name = "Remember on this computer")]
        public bool RememberMe { get; set; }

        [Required]
        public bool Rights { get; set; }
        /// <summary>
        /// Checks if user with given password exists in the database
        /// </summary>
        /// <param name="_username">User name</param>
        /// <param name="_password">User password</param>
        /// <returns>True if user exist and password is correct</returns>
        public bool IsValid(string _username, string _password)
        {
            using (var cn = new SqlConnection(@"Data Source=(localdb)\MSSQLLocalDB;"))
            {
                string _sql = @"SELECT [Username] FROM [dbo].[System_Users] " +
                       @"WHERE [Username] = @u AND [Password] = @p";
                var cmd = new SqlCommand(_sql, cn);
                cmd.Parameters
                    .Add(new SqlParameter("@u", SqlDbType.NVarChar))
                    .Value = _username;
                cmd.Parameters
                    .Add(new SqlParameter("@p", SqlDbType.NVarChar))
                    .Value = Helpers.SHA1.Encode(_password);
                cn.Open();
                var reader = cmd.ExecuteReader();
                if (reader.HasRows)
                {
                    reader.Dispose();
                    cmd.Dispose();
                    return true;
                }
                else
                {
                    reader.Dispose();
                    cmd.Dispose();
                    return false;
                }
            }
        }
    }

    public class RekenContext : DbContext
    {
        public DbSet<Logins> RTApplicatie { get; set; }
    }
}

我还在视图中提供了Razor代码的这一部分:

@model IEnumerable<Something.Models.Logins>

2 个答案:

答案 0 :(得分:0)

您的Login操作会返回Something.Models.Logins而不是List<Something.Models.Logins>,因此您需要更改视图。设置:

@model Something.Models.Logins

答案 1 :(得分:0)

您的错误无法更清楚:当您的操作仅传入Models.Logins的一个实例时,您的视图期望IEnumerable类型为Models.Logins:

public ActionResult Login(Models.Logins user)
{

    ...

    return View(user);
}