在mvc中使用多个控制器

本文关键字:控制器 mvc | 更新日期: 2023-09-27 18:21:11

我正在构建一个管理特定公司员工的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()方法以支持此行为?

在mvc中使用多个控制器

如果没有代码,很难给你精确的答案,但如果我对每个控制器都有正确的理解,你就会有一个与数据库相对应的模型。因此,如果您想使用来自两个或多个模型的实际数据,则必须使用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>
    }