Asp.net mvc 从包含两个模型(其中一个是列表)的MVC视图中获取值

Asp.net mvc 从包含两个模型(其中一个是列表)的MVC视图中获取值,asp.net-mvc,Asp.net Mvc,假设我有一个像下面这样的模型。一个类引用了另一个类对象的集合 public class Department { public int Id{ get; set; } public string Name{ get; set; } public ICollection<Employee> Employees { get; set; } } public class Employee { public string Name { get; set;

假设我有一个像下面这样的模型。一个类引用了另一个类对象的集合

public class Department

{
    public int Id{ get; set; }
    public string Name{ get; set; }
    public ICollection<Employee> Employees { get; set; }
}

public class Employee
{
    public string Name { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }
}
我无法访问视图中员工模型中的任何元素。我如何修改上面的操作方法,以便能够在我的视图中访问员工模型


我甚至尝试使用tuple来合并这两个模型,但这也不起作用。同样,我无法访问视图中的员工模型。

创建如下视图模型:

 public class DepartmentViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<EmployeeViewModel> Employees { get; set; }
}
public class EmployeeViewModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }
}
 var dept=db.Department.SingleOrDefault(id); // you get id in action param
        var model = new DepartmentViewModel
        {
            Name = dept.Name,
            Id = dept.Id,
            Employees = dept.Employees.Select(row => new EmployeeViewModel
            {
                Age = row.Age,
                Email = row.Email,
                Name = row.Name
            }).toList()
        };
@model yourNamespace.DepartmentViewModel
  public ActionResult Update(DepartmentViewModel deptViewModel)
    {
        var dept = db.Department.SingleOrDefault(deptViewModel.Id);
        dept.Name = deptViewModel.Name;
           dept.Employees = deptViewModel.Employees.Select(row => new Employee { 
        Name=row.Name
        }).Tolist();
    }
然后通过
model
以如下方式查看:

return View(model);
并按如下方式为视图设置模型:

 public class DepartmentViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<EmployeeViewModel> Employees { get; set; }
}
public class EmployeeViewModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }
}
 var dept=db.Department.SingleOrDefault(id); // you get id in action param
        var model = new DepartmentViewModel
        {
            Name = dept.Name,
            Id = dept.Id,
            Employees = dept.Employees.Select(row => new EmployeeViewModel
            {
                Age = row.Age,
                Email = row.Email,
                Name = row.Name
            }).toList()
        };
@model yourNamespace.DepartmentViewModel
  public ActionResult Update(DepartmentViewModel deptViewModel)
    {
        var dept = db.Department.SingleOrDefault(deptViewModel.Id);
        dept.Name = deptViewModel.Name;
           dept.Employees = deptViewModel.Employees.Select(row => new Employee { 
        Name=row.Name
        }).Tolist();
    }
如果需要使用ViewModel更新部门,可以执行以下操作:

 public class DepartmentViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<EmployeeViewModel> Employees { get; set; }
}
public class EmployeeViewModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public int Age { get; set; }
}
 var dept=db.Department.SingleOrDefault(id); // you get id in action param
        var model = new DepartmentViewModel
        {
            Name = dept.Name,
            Id = dept.Id,
            Employees = dept.Employees.Select(row => new EmployeeViewModel
            {
                Age = row.Age,
                Email = row.Email,
                Name = row.Name
            }).toList()
        };
@model yourNamespace.DepartmentViewModel
  public ActionResult Update(DepartmentViewModel deptViewModel)
    {
        var dept = db.Department.SingleOrDefault(deptViewModel.Id);
        dept.Name = deptViewModel.Name;
           dept.Employees = deptViewModel.Employees.Select(row => new Employee { 
        Name=row.Name
        }).Tolist();
    }

我理解,当您希望从数据库填充值时,可以使用这种方法。但我的问题是“创建”视图。我需要从用户那里获取值,然后更新数据库。那么,使用“空”模型对象并存储它有什么问题?@Andrew-传递空模型对象时,我无法访问视图中的列表类元素名称(Employee)。例如,model=>model.Employees.Name不可访问。我只能访问第一个类中的项。@UthmanRahimi-我正在寻找一个新的“创建”视图。我不需要将任何值从数据库传递到视图。从用户处获取并更新所有值。因此,如果我按照您的建议创建一个viewmodel,我将无法从视图中的EmployeeViewModel访问任何元素,但您可以使用JavaScript来完成这一切。此外,您可以为“添加项”操作添加按钮(我想您已经有了),并使用c#code在视图中循环对象参考答案和一些动态添加(和删除)子对象的选项objects@StephenMuecke-谢谢。这些帖子帮助很大。我在搜索时找不到它们:)