我是网络应用程序,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);
}
答案 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...
<% } %>
我个人会为你重新冷静,因为你不需要施展,而且它更干净