在MVC详细信息视图中显示值列表

时间:2010-02-02 06:39:59

标签: asp.net asp.net-mvc nerddinner

我是网络应用程序,MVC和LinqToSql的新手。我使用NerdDinner教程作为指南创建了一个MVC Web应用程序。我现在正在添加多对多关系。我只是在每一步都碰壁。我在“编辑”和“创建”视图中有一个多选列表。对于Detail和List视图,我想列出所选的值。

我有3个表:公司,转包和链接表CompanyToSubcontract。我有代码从CompanyToSubcontract表获取我所选公司的guid,该表在我的代码中的其他地方使用。我不知道如何显示它。

我应该编写另一个函数来从Company表中获取公司名称吗?我是否将名称列表传递给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);
    }

1 个答案:

答案 0 :(得分:3)

您有几种选择:
1)您可以创建包含转包合同的新类。 IEnumerable并将新类的对象传递给视图。这是ASP.NET MVC中的常见做法。

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

在控制器中:

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...
<% } %>

我个人会为你重新冷静,因为你不需要施展,而且它更干净