我正在构建一个管理特定公司员工的Web应用程序。我有两个控制器:Staff
和Company
。两个控制器都有标准的CRUD方法。
当我访问URL sitename/Company/Staff/CompanyId
时,我想在我的详细信息视图中显示该公司雇用的所有员工。
Details()
方法的当前实现:
// GET: Company/Details/1
public ActionResult Details(int id)
{
Company co = db.Company.Find(id);
return View(co);
}
如何修改当前的Details()
方法以支持此行为?
答案 0 :(得分:1)
如果没有代码,很难给出精确的答案,但是如果我通常为每个控制器正确理解你,那么你就拥有了一个与你的数据库相对应的模型。因此,如果您想使用来自2个或更多模型的动作数据,则必须使用Linq进行连接。
首先,您要创建一个包含公司和员工的ViewModel:
public class MyViewModel
{
public Company Company { get; set; }
public Employee Employee { get; set; }
}
然后在你的控制器动作中你应该填充这个ViewModel并传递给视图,所以它看起来像这样:
[Route("Company/Staff/{id}")]
public ActionResult Details(int id)
{
var viewModel =
from c in db.Company
join e in db.Employee on c.CompanyId equals e.Id
where c.CompanyId == id
select new MyViewModel { Company = c, Employee = e };
return View(viewModel);
}
View中的代码应该是这样的
@model IEnumerable<YourAppName.Models.MyViewModel>
@foreach (var item in Model)
{
<div>
<p>@item.Employee.Name</p>
</div>
}