【问题标题】:Argument 1: cannot convert from 'System.Collections.Generic.List' to 'System.Collections.Generic.List'参数 1:无法从 'System.Collections.Generic.List' 转换为 'System.Collections.Generic.List'
【发布时间】:2022-01-07 18:02:02
【问题描述】:

我正在学习 Asp.net Core 并使用 CRUD 操作、SQL 服务器和使用实体框架构建一个简单的 Web。 当我尝试构建排序方法时,我在参数员工的这一行中出现了这个错误

return View(this.SortEmployees(employees, SortField, CurrentSortField, SortDirection));

这就是错误:

Severity    Code    Description Project File    Line    Suppression State
Error   CS1503  Argument 1: cannot convert from 'System.Collections.Generic.List<EmployeesApp.Models.Employee>' to 'System.Collections.Generic.List<EmployeesApp.Controllers.Employee>' EmployeesApp    

那是我的模特:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace EmployeesApp.Models
{
    [Table("Employee", Schema ="dbo")]

    public class Employee
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Display(Name ="Employee ID")]
        public int EmployeeId { get; set; }


        [Required]
        [Column(TypeName ="varchar(5)")]
        [MaxLength(5)]
        [Display(Name ="Employee Number")]
        public string EmployeeNumber { get; set; }


        [Required]
        [Column(TypeName = "varchar(150)")]
        [MaxLength(100)]
        [Display(Name = "Employee Name")]
        public string EmployeeName { get; set; }


        [Required]
        [DataType(DataType.Date)]
        [Display(Name ="Date of Birth")]
        [DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}")]
        public DateTime DOB { get; set; }


        [Required]
        [DataType(DataType.Date)]
        [Display(Name = "Hiring Date")]
        [DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}")]
        public DateTime HiringDate { get; set; }


        [Required]
        [Column(TypeName ="decimal(12,2)")]
        [Display(Name ="Gross Salary")]
        public decimal GrossSalary { get; set; }


        [Required]
        [Column(TypeName = "decimal(12,2)")]
        [Display(Name = "Net Salary")]
        public decimal NetSalary { get; set; }


        [ForeignKey("Department")]
        [Required]
        public int DepartmentId { get; set; }



        [Display(Name = "Department")]
        [NotMapped]
        public string DepartmentName { get; set; }


        public virtual Department Department { get; set; }
    }
}

那是我的控制器:

namespace EmployeesApp.Controllers

{

    public enum SortDirection
    {
        Ascending,
        Descending
    }


    public class Employee : Controller
    {
       
        HRDatabaseContext dbContext = new HRDatabaseContext();

        public IActionResult Index(string SortField, string CurrentSortField, SortDirection SortDirection)
        {
            var employees = GetEmployees();
            return View(this.SortEmployees(employees, SortField, CurrentSortField, SortDirection));
        }



        private List<Models.Employee> GetEmployees()
        {
            return (from Employee in dbContext.Employees
                    join Department in dbContext.Departments on Employee.DepartmentId equals Department.DepartmentId
                    select new Models.Employee
                    {
                        EmployeeId = Employee.EmployeeId,
                        EmployeeName = Employee.EmployeeName,
                        DOB = Employee.DOB,
                        HiringDate = Employee.HiringDate,
                        GrossSalary = Employee.GrossSalary,
                        NetSalary = Employee.NetSalary,
                        DepartmentId = Employee.DepartmentId,
                        DepartmentName = Department.DepartmentName

                    }).ToList();
        }


        public IActionResult Add()
        {
            ViewBag.Department = this.dbContext.Departments.ToList();
            return View();
        }


        [HttpPost]
        public IActionResult Add(Models.Employee model)
        {
            ModelState.Remove("EmployeeID");
            ModelState.Remove("Department");
            ModelState.Remove("DepartmentName");
            if (ModelState.IsValid)
            {
                dbContext.Employees.Add(model);
                dbContext.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.Department = dbContext.Departments.ToList();
            return View("Add", model);
        }


        public IActionResult Edit(int ID)
        {
            HRDatabaseContext dbContext1 = dbContext;
            Models.Employee data = dbContext1.Employees.Where(e => e.EmployeeId == ID).FirstOrDefault();
           

            ViewBag.Department = this.dbContext.Departments.ToList();
            return View("Add", data);
        }


        [HttpPost]
        public IActionResult Edit(Models.Employee model)
        {
            ModelState.Remove("EmployeeID");
            ModelState.Remove("Department");
            ModelState.Remove("DepartmentName");
            if (ModelState.IsValid)
            {
                dbContext.Employees.Update(model);
                dbContext.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.Department = dbContext.Departments.ToList();
            return View();
        }


        public IActionResult Delete(int ID)
        {
            Models.Employee data = this.dbContext.Employees.Where(e => e.EmployeeId == ID).FirstOrDefault();

            if (data != null)
            {
                dbContext.Employees.Remove(data);
                dbContext.SaveChanges();
            }

            return RedirectToAction("Index");
        }

     
        private List<Employee> SortEmployees(List<Employee> employees, String sortField, string currentSortField, SortDirection sortDirection)
        
        {
            if (string.IsNullOrEmpty(sortField))
            {
                
                ViewBag.SortField = "EmployeeNumber";
                ViewBag.SortField = SortDirection.Ascending;

            }
            else
            {
                if (currentSortField == sortField)
                
                {
                    ViewBag.SortDirection = sortDirection == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending;
                    
                }
                else
                    ViewBag.SortDirection = sortDirection == SortDirection.Ascending;
                    ViewBag.SortField = sortField;

            }

            //* create the sorting proccess
            var propertyInfo = typeof(Employee).GetProperty(ViewBag.SortField);
            if (ViewBag.SortDirection == SortDirection.Ascending)
            {
                employees = employees.OrderBy(e => propertyInfo.GetValue(e, null)).ToList();
            }
            else
            {
                employees = employees.OrderByDescending(e => propertyInfo.GetValue(e, null)).ToList();

            }

            return employees;
        }
    }
}   

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core


    【解决方案1】:

    您的控制器中的SortEmployees 方法采用List&lt;Employee&gt;,在这种情况下是Controllers.Employee,而不是您怀疑的Models.Employee

    在这种情况下,最好的解决方案是将控制器重命名为 EmployeeController 以遵循 ASP.NET 约定。在 ASP.NET 中,控制器始终命名为 [Name]Controller

    【讨论】:

      【解决方案2】:
          private List<Employee> SortEmployees(List<Employee> employees, String sortField, string currentSortField, SortDirection sortDirection)
          
          {
      

      问题与上述SortEmployees 方法、其参数和使用EmployeesApp.Controllers.Employee 模型而不是EmployeesApp.Models.Employee 的返回数据有关。所以,调用这个方法的时候会报这个错误。

      为了解决这个问题,尝试修改SortEmployees方法如下:使用Models.Employee

          private List<Models.Employee> SortEmployees(List<Models.Employee> employees, String sortField, string currentSortField, SortDirection sortDirection)
          {
      

      【讨论】:

        【解决方案3】:

        这是由于模型类名和控制器类名相同导致没有选择正确的模态。在这种情况下,您可以在使用它的任何位置显式添加 Models.Employee 或重命名控制器名称或模型名称本身。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多