我的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>
答案 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);
}