2015-06-18 2 views
4

Я хочу получить несколько моделей в одном представлении. У меня есть папка DAL и DbContext.MVC Несколько моделей в одном представлении

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 для элемента в Model like Links. Благодарю.

+0

А также @ Html.DisplayFor помощник хороший выбор для этого примера? – Brkr

+4

Создайте ViewModel, который обертывает другие модели ... –

+0

Как CvContext? Но внутри модели не DAL? – Brkr

ответ

10

Вы должны создать модель представления следующим образом:

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. 
+0

Для каждой комбинации моделей мы должны создать ViewModel в соответствии с этим решением, но будет ли это хорошим вариантом? Как насчет динамической модели? – hasan

0
//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) 
} 
Смежные вопросы