2015-11-07 119 views
-4

我正在构建一个管理特定公司员工的Web应用程序。我有两个控制器:StaffCompany。两个控制器都有标准的CRUD方法。在mvc中使用多个控制器

当我访问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

什么关于本网站=>^h ttp://www.asp.net/mvc – CodeNotFound

+0

我已经检查过了,但没有任何东西似乎符合我的需要? – stackface

+0

没有足够的信息给出详细的答案。你有没有一种方法可以从你的数据库中检索特定的数据并将其发送到一个视图(这听起来像你想要做的)?你可以发布代码吗? –

回答

1

没有代码就很难给出准确的答案,但是如果我通常对每个控制器都有正确的理解,那么您的模型对应于您的数据库。所以,如果你想使用来自2个或更多模型的动作数据,你必须使用Linq进行连接。

为您创建一个视图模型与公司和员工的第一步:

public class MyViewModel 
{ 
    public Company Company { get; set; } 
    public Employee Employee { get; set; } 
} 

而在这之后你的控制器动作,您应该填补这个视图模型,并传递给视图,所以它看起来会是这样的:

[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); 
} 

,并考虑代码应该是这样的

@model IEnumerable<YourAppName.Models.MyViewModel> 
    @foreach (var item in Model) 
    { 
     <div> 
      <p>@item.Employee.Name</p> 
     </div> 
    } 
+0

这样做会给我所需的路线,如这个sitename/Company/Staff/CompanyId。我会上传代码,但我不知道什么会有所帮助。 – stackface

+1

@stackface我使用[Route(“Company/Staff/{id}”)]更新了代码,所以当你输入URL sitename/Company/Staff/CompanyId时,你会得到这个动作 – user2771704

+0

谢谢,我目前有一个Details方法公司控制器,它在这一刻看起来像这样 '// GET:Company/Details/1 public ActionResult Details(int id) { Company co = db.Company.Find(id); return View(co); }' 所以我需要创建一个新的方法的细节?或调整它? – stackface

相关问题