2010-02-02 115 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