I want to reach multiple models in one view. I have DAL folder and 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>();
}
}
And 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)" rel="nofollow noreferrer noopener">
@Html.DisplayFor(modelItem => item.LinkName)
<span class="icon"></span>
<span class="menu-icon">
<img src="@Url.Content(item.LinkImage)" alt="" />
</span>
</a>
</li>
}
</ul>
How can i reach all models? I will use foreach for item in Model like Links. Thanks.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You should create a view model as follows:
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; }
}
Then from your controller populate them as to your requirements, as an example:
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);
}
Then change the model in your view to FooViewModel and all your properties will be available in there.
@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.
Method 2
//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)
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0