C# 在mvc实体框架中将多对多数据加载到viewmodel中

C# 在mvc实体框架中将多对多数据加载到viewmodel中,c#,asp.net-mvc,entity-framework,model-view-controller,many-to-many,C#,Asp.net Mvc,Entity Framework,Model View Controller,Many To Many,视图模型 public class ItemDetail { public IEnumerable<DescriptionTag> DescrptionsTags { get; set; } //many to many join table public IEnumerable<Item> Items { get; set; } } 看法 详情: 代码运行良好。问题是,在用户单击select链接或首次加载页面之前,标记不会加载到表中。也就是说,只有当i

视图模型

public class ItemDetail
{
    public IEnumerable<DescriptionTag> DescrptionsTags { get; set; } //many to many join table
    public IEnumerable<Item> Items { get; set; }
}
看法

详情:

代码运行良好。问题是,在用户单击select链接或首次加载页面之前,标记不会加载到表中。也就是说,只有当id传递给控制器时,表才会加载标记。这不是我希望它的表现。有没有一种方法可以在不需要传递id的情况下加载标签

我尝试做的与Stackoverflow中的标记类似。每个帖子都有很多标签,每个标签都可以有很多帖子。我需要的是,在一个表列中,我想加载与行的特定项id相关的所有标记

我目前正在跟随这个链接的教程-。
但是上面的代码是基于教程的我自己的版本。因此,可能有一种完全不同的方法来完成我正在尝试的操作。

我不确定是否知道您正在尝试执行的操作,但您不需要条件来在控制器上加载标记。查看您的items模型会很有用,因为我想它应该包括一个导航属性DescriptionTags。你试过这个吗

 public ActionResult Index(int? id)
 {
        ItemDetail viewModel=new ItemDetail();

        viewModel.Items = db.Items.Include(i=>i.DescriptionTags); //eager loading
        related data


    return View(viewModel);
}

解决了。控制器中的foreach循环完成了这项工作

ItemDetail viewModel=new ItemDetail();
viewModel.Items = db.Items.Include(i=>i.DescriptionTags);

foreach(Item i in viewModel.Items)
{
    viewModel.DescrptionsTags = i.DescriptionTags;
}

谢谢你的回复。如果我不加载标记,那么标记将不会加载到我的视图模型属性“DescriptionTags”中。您的答案将不会加载视图模型属性“DescriptionTags”中的描述名称。我尝试做的与Stackoverflow中的标记类似。每个帖子都有很多标签,每个标签都可以有很多帖子。我需要的是,在表格单元格中,我希望加载与特定项id相关的所有标记。我正试图通过“viewModel.DescrptionsTags=viewModel.Items.Wherei=>I.id==id.Value.Single.DescriptionTags;”来实现这一点。但要使其工作,需要传递控制器参数。因为,在第一次加载时,参数未传递,“标记”列为空。很抱歉,我仍然丢失,是否要在单独的表中加载与所有文章相关的所有标记?显然,如果您有if id!=在加载标签之前为null,如果您不这样做,它们将不会出现;我没有和我。。。你能提供你想要的模型布局吗?是的,你是对的。实际上,我想要的是在没有id的情况下加载标记。例如,当页面第一次加载时没有id,因为没有参数将传递给控制器。然而,我明白了。我在viewmodel上使用了foreach。你可以检查我的答案。也许你会明白我想做什么。
 public ActionResult Index(int? id)
 {
        ItemDetail viewModel=new ItemDetail();

        viewModel.Items = db.Items.Include(i=>i.DescriptionTags); //eager loading
        related data


    return View(viewModel);
}
ItemDetail viewModel=new ItemDetail();
viewModel.Items = db.Items.Include(i=>i.DescriptionTags);

foreach(Item i in viewModel.Items)
{
    viewModel.DescrptionsTags = i.DescriptionTags;
}