2010-02-02 69 views
3

我是網絡應用程序,MVC和LinqToSql的新手。我使用NerdDinner教程作爲指南創建了一個MVC Web應用程序。我現在正在爲它增加多對多的關係。我每走一步都會碰壁。我在編輯和創建視圖中有一個多選列表。對於Detail和List視圖,我想列出所選的值。顯示MVC中的值列表詳細信息視圖

我有3個表:Company,Subcontract和一個鏈接表CompanyToSubcontract。我的代碼從我的代碼中其他地方使用的CompanyToSubcontract表中獲取我所選公司的GUID。我不知道如何顯示它。

我應該編寫另一個函數從公司表中獲取公司名稱嗎?我是否將名單列表傳遞給SubcontractDetail視圖,然後以某種方式在那裏循環播放?

與SubcontractIndex視圖相同的問題。索引視圖採用表格式,我希望有一個「公司」列,每個子合同行都有逗號分隔的公司列表。

[Authorize] 
     public ActionResult Details(string id) 
     { 
      subcontract subcontract = subcontractRepository.GetSubcontract(id); 

      IEnumerable<Guid> cmpny = subcontractRepository.GetSubcontractCompanies(subcontract.subcontract_id); 

      if (subcontract == null) 
       return View("NotFound"); 
      else 
      { 
       return View("Details", subcontract); 
      } 
     } 

[Authorize] 
    public ActionResult Index() 
    { 
     var subcontracts = subcontractRepository.FindAllSubcontracts().ToList(); 
     return View("Index", subcontracts); 
    } 

回答

2

您有幾種選擇:
1)您可以創建一個包含轉包& IEnumerable的新類,並通過新的類的對象的視圖。這在ASP.NET MVC中是很常見的做法。

public class MyCustomModelView 
{ 
    public IEnumerable<Guid> Company{ get; set; } 
    public subcontract Subcontract { get; set; } 
} 

和Controller:

return View("Details", new MyCustomModelView(){ 
    Company = cmpny, 
    Subcontract = subcontract }); 

並添加這種新型的應該是你的視圖的類型。

enter code here 

2)您也可以了IEnumerable添加到ViewData的集合是這樣的:

ViewData["Company"] = cmpny; 

然後用索引訪問視圖

<% foreach(Guid id in (ViewData["Company"] as IEnumerable<Guid>)) { %> 
...Display names... 
<% } %> 

我個人會recomand你冷杉,因爲你不需要投,它更清潔

+0

使用customModelView。以爲我可以弄明白,但我怎麼會這樣做的索引視圖?我目前通過了一份分包合同清單,對於清單中的每個分包合同,我如何獲得公司清單? – RememberME 2010-02-02 18:12:20

+0

如果您需要每個分包合同的公司名單,您應該將其列入控制器並將所有數據傳遞到視圖。如果您使用Linq to Sql或Entity Framework,並且在分包商和公司之間存在關聯,則可以使用對象的相關屬性進行導航。 – 2010-02-02 18:43:54