微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

新创建的值的 ASP .NET MVC 5 复选框循环

如何解决新创建的值的 ASP .NET MVC 5 复选框循环

我有三个实体类

namespace App.Data.Models
{
    public class Employee
    {
        [Key]
        public int Id { get; set; } 
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public virtual ICollection<Project> Projects { get; set; }

    }
 
    public class Project
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }
     public class EmployeeProject
    {
        [Key]
        public int Id { get; set; }
        [ForeignKey]
        public int EmployeeId { get; set; }
        [ForeignKey]
        public int ProjectId { get; set; }

    public virtual Employee  Employee{ get; set; }
    public virtual Project Project { get; set; }
    }
  
}

一个视图模型类

namespace App.Data.Models
{
public class Employeeviewmodel
    {
        public Employee Employee { get; set; }
        public List<SelectListItem> Projects { get; set; }
    }
}

现在我可以添加新员工和新项目。我正在使用 localDB 和实体框架。这是我的代码 https://github.com/IzaGorska/Project

链接

我想要做的是在 EmployeeCreate 视图中为每个项目设置复选框(需要记住我没有任何硬编码项目 - 创建新项目意味着额外的复选框)。 同样在 EmployeeDetails 视图中,我只想显示选中的项目。我该怎么做?

我有员工和项目的数据库。项目数据库

namespace App.Data.Services
{
    public interface IProjectData
    { 
        IEnumerable<Project> GetAll();
        Project Get(int id);
        void Add(Project project);
        void Update(Project project);   
    }
public class InMemoryProjectData : IProjectData
    {
        List<Project> projects;
        
        public void Add(Project project)
        {
            projects.Add(project);
            project.Id = projects.Max(e => e.Id) + 1;
        }

        public void Update(Project project)
        {
            var exist = Get(project.Id);
            if (exist != null)
            {
                exist.Name = project.Name;
                exist.Description = project.Description;

            }
        }
        public Project Get(int id)
        {
            return projects.FirstOrDefault(e => e.Id == id);
        }

        public IEnumerable<Project> GetAll()
        {
            return projects.OrderBy(e => e.Name);
        }

    }
public class sqlprojectData : IProjectData
    {
        private readonly AppDbContext db;

        public sqlprojectData(AppDbContext db)
        {
            this.db = db;
        }

        public void Add(Project project)
        {
            db.Projects.Add(project);
            db.SaveChanges();
        }

        public Project Get(int id)
        {
            return db.Projects.FirstOrDefault(p => p.Id == id); 
        }

        public IEnumerable<Project> GetAll()
        {
            return from p in db.Projects
                   orderby p.Name
                   select p;
        }

        public void Update(Project project)
        {
            var entry = db.Entry(project);
            entry.State = EntityState.Modified;
            db.SaveChanges();
        }
    }

}

解决方法

控制器:

public partial class EmployeeController : Controller
{
private readonly AppDbContext _db;

  public EmployeeController(AppDbContext db)
    {
    _db = db;
}
 private List<SelectListItem> GetProjectListItems()
    {
        return _db.Projects.Select(p=> 
            new SelectListItem {
                         Text = p.Name,Value = p.Id.ToString()
                               }).ToList();
     }
        
  public IActionResult CreateEmployee()
  {
   var employeeViewModel=new EmployeeViewModel
   {
   Employee=new Employee(),Projects=GetProjectListItems()
   }
 return View(employeeViewModel);
 }
}

在视图中,您可以使用此代码创建复选框列表:

@using App.Data.Models
@model EmployeeViewModel

.... @Model.Employee input controls
 
<ul>
        @for (var i = 0; i < Model.Projects.Count; i++)
        {
    <li>       
   <input type="checkbox" asp-for="@Model.Projects[i].Selected"  />
   <label asp-for= "@Model.Projects[i].Selected"> @Model.Projects[i].Name</label>
   <input type="hidden" asp-for="@Model.Projects[i].Value" />
   <input type="hidden" asp-for="@Model.Project[i].Text" />                
    </li>
        }
</ul>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。