c# - 此错误的新内容:传递到字典中的模型项的类型为“System.Collections.Generic.List`1[]
问题描述
我对 ASP.NET MVC 和 C# 很陌生。我的最后一年项目要求我使用 ASP.NET MVC c# 做一个 Web 应用程序。如果您能帮助这个新手,我将不胜感激。
我一直收到此错误,但我似乎无法找出错误或如何修复它:
传入字典的模型项的类型为“System.Collections.Generic.List`1[test2.Models.UsersModel]”,但此字典需要“test2.Models.user_account”类型的模型项。
这是我的控制器:
using System.Net;
using System.Web;
using System.Web.Mvc;
using test2.Models;
using System.Runtime.InteropServices;
using System.Net.Http;
using System.Runtime.InteropServices.WindowsRuntime;
namespace test2.Controllers
{
//Admin page show be able to manage role
public class AdminController : Controller
{
public ActionResult Index() {
ubdcsEntities dc = new ubdcsEntities();
var userRoles = (from user in dc.user_account
select new {
UserId = user.userID,
Username = user.username,
EmailID = user.emailID,
RoleName = (from userRole in dc.userRoles
join role in dc.role1 on userRole.roleID
equals role.roleID
select role.roleName).ToList()
}).ToList().Select(p => new UsersModel()
{
Username = p.Username,
EmailID = p.EmailID,
RoleName = p.RoleName.ToString()
}).ToList();
return View(userRoles);
}
}
}
我的索引 - 是的,我试图为 roleName 使用下拉列表,以便我可以从下拉列表中分配用户的角色,但它不起作用
@model IEnumerable<test2.Models.UsersModel>
@{
ViewBag.Title = "Users With Roles";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="box-title">
<b>Users with Roles</b>
</h3>
</div>
<!-- /.box-header -->
<div class="panel-body">
<table class="table table-hover table-bordered table-condensed" id="UsersWithRoles">
<thead>
<tr>
<td><b>Username</b></td>
<td><b>Email</b></td>
<td><b>Roles</b></td>
</tr>
</thead>
@foreach (var user in Model)
{
<tr>
<td>@user.Username</td>
<td>@user.EmailID</td>
<td>
@user.RoleID
@*Html.DropDownListFor(user => user.FirstOrDefault().RoleName, new SelectList(new[]{"Admin","Student", "Counselor"}))*@
</td>
</tr>
}
</table>
</div>
<div class="panel-footer">
<p class="box-title"><b>Total Users till @String.Format("{0 : dddd, MMMM d, yyyy}", DateTime.Now) : </b><span class="label label-primary">@Model.Count()</span></p>
</div>
</div>
@section scripts{
<script>
$(function () {
$('#UsersWithRoles').DataTable({
"paging": true,
"lengthChange": true,
"searching": true,
"ordering": true,
"info": true,
"autoWidth": true
});
});
</script>
} v>
我的模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace test2.Models
{
public partial class UsersModel
{
public int UserID { get; set; }
public string Username { get; set; }
public string EmailID { get; set; }
public int RoleID { get; set; }
public string RoleName { get; set; }
}
}
下面是数据库中的模型(user_account)
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace test2.Models
{
using System;
using System.Collections.Generic;
public partial class user_account
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public user_account()
{
this.calendars = new HashSet<calendar>();
}
public int userID { get; set; }
public string username { get; set; }
public string emailID { get; set; }
public string password { get; set; }
public int roleID { get; set; }
public virtual user_emergency user_emergency { get; set; }
public virtual user_profile user_profile { get; set; }
public virtual user_record user_record { get; set; }
public virtual counselor_account1 counselor_account1 { get; set; }
public virtual userRole userRole { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<calendar> calendars { get; set; }
public virtual role1 role { get; set; }
}
}
使用 @model.test2.models.user_account 的视图 - 用户注册
@model test2.Models.user_account
@{
ViewBag.Title = "Signup";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Sign in</h2>
<div>
@using (Html.BeginForm("Signup", "Home"))
{
<div style="color:red;">@Html.ValidationSummary()</div>
<!--Show details are saved successfully message-->
<div class="col-lg-12">@ViewBag.Message</div>
<br />
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.username, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.username, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.username, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.emailID, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.emailID, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.emailID, "", new { @class = "text-danger" })
@Html.ValidationMessage("EmailExist", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.password, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.password, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.password, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.ConfirmPassword, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.ConfirmPassword, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.ConfirmPassword, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Register" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Login", "Index", "Home")
</div>
</div>
@section Scripts{
<script src="~/Scripts/jquery-3.4.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
}
家庭控制器
//Return Register view
[AllowAnonymous]
[HttpGet]
public ActionResult Signup()
{
return View();
}
[HttpPost]
//[ValidateAntiForgeryToken]
public ActionResult Signup(user_account user, int role_id)
{
//new code
var claims = new List<Claim>();
#region //Email already existt
var isExist = IsEmailExist(user.emailID);
if (isExist)
{
ModelState.AddModelError("EmailExist", "Email already exist");
return View(user);
}
#endregion
#region Password Hashing
user.password = Crypto.Hash(user.password);
user.ConfirmPassword = Crypto.Hash(user.ConfirmPassword);
#endregion
//We check if the model state is valid or not. We have used DataAnnotation attributes.
//If any form value fails the DataAnnotation validation the model state becomes invalid.
if (ModelState.IsValid)
{
#region Save to Database
using (ubdcsEntities db = new ubdcsEntities())
{
//If the model state is valid i.e. the form values passed the validation then we are storing the User's details in DB.
//Calling the SaveDetails method which saves the details.
claims.Add(new Claim(ClaimTypes.Role, role_id.ToString()));
db.user_account.Add(user);
db.SaveChanges();
}
#endregion
//showing succesfully registered page
ViewBag.Message = "User has successfully registered!";
return View();
}
else
{
//If the validation fails, we are returning the model object with errors to the view, which will display the error messages.
ViewBag.Message = "Invalid Request";
return View(user);
//return View("Signup", "Home", user);
}
}
[NonAction]
public bool IsEmailExist(string emailID)
{
using (ubdcsEntities dc = new ubdcsEntities())
{
var v = dc.user_account.Where(a => a.emailID == emailID).FirstOrDefault();
return v != null;
}
}
解决方案
推荐阅读
- ios - Swift 4.2 - 添加额外空间的约束
- c# - 如何将两个重载重构为一个
- apache-spark - Spark 数据集缓存仅使用一个执行器
- nativescript - Nativescript Vue 导航问题
- python - 如何在 Pandas DataFrame 中减去时间
- angular - 如何动态添加 FormArray 项并正确绑定控件和模型?
- r - 根据不同列中的 NA 数量删除基于列重复的行
- hive - 在 Hive 中使用 regexp_replace 从字符串中删除字母
- powershell - 使用变量的 Get-ADObject 和 Where-Object 问题
- ios - 更改 UILabel 部分被星号包围的文本颜色