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-谢谢。这些帖子帮助很大。我在搜索时找不到它们:)