簡體   English   中英

一個視圖中的MVC多個模型

[英]MVC Multiple Models in One View

我想在一個視圖中訪問多個模型。 我有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>();
   }
}

和HomeController

public class HomeController : Controller
{
   private CvContext db = new CvContext();

   public ActionResult Index()
   {
      return View(db.Links.ToList());
   }
}

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>

我怎樣才能到達所有型號? 我會在模型鏈接中使用foreach for item。 謝謝。

您應該創建一個視圖模型,如下所示:

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; }
}

然后從您的控制器填充它們以滿足您的要求,例如:

   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);
   }

然后將視圖中的模型更改為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.
//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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM