【发布时间】:2014-07-21 06:20:35
【问题描述】:
查看模型
public class ItemDetail
{
public IEnumerable<DescriptionTag> DescrptionsTags { get; set; } //many to many join table
public IEnumerable<Item> Items { get; set; }
}
控制器动作
public ActionResult Index(int? id)
{
ItemDetail viewModel=new ItemDetail();
viewModel.Items = db.Items.Include(i=>i.DescriptionTags); //eager loading related data
if (id != null)
{
viewModel.DescrptionsTags = viewModel.Items.Where(i => i.ID == id.Value).Single().DescriptionTags; // loads the description tags to viewmodel property
}
return View(viewModel);
}
查看
@foreach (var item in Model.Items) {
<tr>
<td>
@Html.DisplayFor(modelItem=>item.ID)
</td>
<td>
@*Loading tags in the table*@
@if (Model.DescrptionsTags != null)
{
foreach (var tag in item.DescriptionTags)
{
<a>@tag.Description.DescriptionName</a>
}
}
</td>
<td>
@Html.DisplayFor(modelItem => item.Size)
</td>
<td>
@Html.ActionLink("Select", "Index", new { id=item.ID}) |
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
详情:
代码运行良好。问题是,直到用户单击选择链接或第一次加载页面时,标签才会加载到表中。也就是说,只有在将 id 传递给控制器时,表才会加载标签。这不是我希望它表现的方式。有没有一种方法可以加载标签而不需要传递 id?
我正在尝试做的是类似于 Stackoverflow 中的标签。每个帖子都有很多标签,每个标签可以有很多帖子。我需要的是,在表格列中,我想加载与行的特定项目 id 相关的所有标签。
我目前正在关注此链接中的教程 - http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application。 但是上面的代码是我自己根据教程做的版本。所以,可能有一种完全不同的方式来做我正在尝试的事情。
【问题讨论】:
标签: c# asp.net-mvc entity-framework model-view-controller many-to-many