2015-11-07 115 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

相關問題