在mvc中使用多个控制器

时间:2015-11-07 16:41:10

标签: c# asp.net-mvc razor

我正在构建一个管理特定公司员工的Web应用程序。我有两个控制器:StaffCompany。两个控制器都有标准的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()方法以支持此行为?

1 个答案:

答案 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>
    }