C# MVC在一个视图中显示多个模型

C# MVC在一个视图中显示多个模型,c#,asp.net,asp.net-mvc,entity-framework,razor,C#,Asp.net,Asp.net Mvc,Entity Framework,Razor,我想在一个视图中访问多个模型。我有DAL文件夹和DbContext class CvContext : DbContext { public CvContext() : base("CvContext") { } public DbSet<LinkModel> Links { get; set; } public DbSet<AboutModel> Abouts { get; set; } public DbSet<Portfo

我想在一个视图中访问多个模型。我有DAL文件夹和DbContext

class CvContext : DbContext
{
   public CvContext() : base("CvContext")
   {
   }

   public DbSet<LinkModel> Links { get; set; }
   public DbSet<AboutModel> Abouts { get; set; }
   public DbSet<PortfolioModel> Portfolios { get; set; }
   public DbSet<SkillModel> Skills { get; set; }

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
   }
}
Index.cshtml

@model IEnumerable<MvcCv.Models.LinkModel>

<ul>
   @foreach (var item in Model)
   {
      <li>
         <a href="@Html.DisplayFor(modelItem => item.LinkUrl)">
                            @Html.DisplayFor(modelItem => item.LinkName)
            <span class="icon"></span>
            <span class="menu-icon">
               <img src="@Url.Content(item.LinkImage)" alt="" />
            </span>
         </a>
      </li>
   }
</ul>
@model IEnumerable
    @foreach(模型中的var项目) {
  • }

如何接触所有型号?我将使用foreach作为模型链接中的项。谢谢。

您应该创建一个视图模型,如下所示:

public class FooViewModel
{
   public IEnumerable<LinkModel> Links { get; set; }
   public IEnumerable<AboutModel> Abouts { get; set; }
   public IEnumerable<PortfolioModel> Portfolios { get; set; }
   public IEnumerable<SkillModel> Skills { get; set; }
}
然后将视图中的模型更改为
FooViewModel
,所有属性都将在其中可用

@model FooViewModel

<ul>
   @foreach (var item in Model.Links)
   {
      <li>
           @item
      </li>
   }
</ul>

<ul>
   @foreach (var item in Model.Links)
   {
      <li>
           @item
      </li>
   }
</ul>

// ....etc, obviously change the outputs as needed.
@model FooViewModel
    @foreach(Model.Links中的var项) {
  • @项目
  • }
    @foreach(Model.Links中的var项) {
  • @项目
  • }
//…等,根据需要明显改变输出。
以及@Html.DisplayFor helper对于本例来说是个不错的选择?创建一个包装其他模型的ViewModel…比如CvContext?但内部模型不是DAL,对吗?是的,不要传递DAL,创建一个类,它有4个列表。从DAL中填充这些列表(在控制器操作方法中执行此操作),并将此新类传递给视图。。。。这是视图模型的概念。。。这是一个模型,但它只包含特定视图所需的所有信息…谢谢,我将尝试使用此方法。对于每个模型组合,我们必须根据此解决方案创建ViewModel,但这是一个好的选择吗?动态模型呢?
   public ActionResult Index()
   {
      var model = new FooViewModel();
      model.Links = db.Links.ToList();
      model.Abouts = db.Abouts.ToList();
      model.Portfolios = db.Portfolios.ToList();
      model.Skills = db.Skills.ToList();
      return View(model);
   }
@model FooViewModel

<ul>
   @foreach (var item in Model.Links)
   {
      <li>
           @item
      </li>
   }
</ul>

<ul>
   @foreach (var item in Model.Links)
   {
      <li>
           @item
      </li>
   }
</ul>

// ....etc, obviously change the outputs as needed.
//suppose you have two Models

public class student
{
 public int Id
 public string Name{get;set;}
}

public class class
{
 public int Id
 public string Name{get;set;}
}

// Now combine these two class Model in single Model for example:

public class Mixmodel
{
 public Student student {get;set;}
 public Class class {get;set;}
}

//here is the Home controller of the Index view

@model projectName.MixModel

@foreach(var item in Model.class)
{
@html.displayfor(item.class.Name)
}

@foreach(var item in Model.student)
{
@html.displayfor(item.student.Name)
}