3

我是 Web 应用程序、MVC 和 LinqToSql 的新手。我使用 NerdDinner 教程作为指南创建了一个 MVC Web 应用程序。我现在正在向它添加多对多关系。而且我每一步都撞墙。我在编辑和创建视图中有一个多选列表。对于详细信息和列表视图,我想列出选定的值。

我有 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);
    }
4

1 回答 1

3

您有几个选择:
1)您可以创建包含 subcontract 和 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...
<% } %>

我个人会向你推荐冷杉,因为你不需要投射而且更干净

于 2010-02-02T08:10:24.657 回答