Skip to content

ErcanOPAK.com

  • ASP.Net WebForms
  • ASP.Net MVC
  • C#
  • SQL
  • MySQL
  • PHP
  • Devexpress
  • Reportviewer
  • About
ASP.Net MVC / C#

Using View Model to pass Multiple Models in Single View in MVC

- 22.06.19 | 22.11.19 - ErcanOPAK

In MVC we cannot pass multiple models from a controller to the single view.
There are a few solution for that problem. But in this article we will use View Model.
Here is the solution:

Let’s say we have Teacher and Student classes.

public class Teacher  
{  
    public int TeacherId { get; set; }  
    public string Code { get; set; }  
    public string Name { get; set; }  
}   
  
public class Student  
{  
    public int StudentId { get; set; }  
    public string Code { get; set; }  
    public string Name { get; set; }  
    public string EnrollmentNo { get; set; }  
}

And those are the methods that help us to get all the teachers and students.

private List<Teacher> GetTeachers()  
{  
    List<Teacher> teachers = new List<Teacher>();  
    teachers.Add(new Teacher { TeacherId = 1, Code = "TT", Name = "Student1" });  
    teachers.Add(new Teacher { TeacherId = 2, Code = "JT", Name = "Student2" });  
    teachers.Add(new Teacher { TeacherId = 3, Code = "RT", Name = "Studen3" });  
    return teachers;  
}   
  
public List<Student> GetStudents()  
{  
    List<Student> students = new List<Student>();  
    students.Add(new Student { StudentId = 1, Code = "L0001", Name = "Student1", EnrollmentNo = "201404150001" });  
    students.Add(new Student { StudentId = 2, Code = "L0002", Name = "Student2", EnrollmentNo = "201404150002" });  
    students.Add(new Student { StudentId = 3, Code = "L0003", Name = "Student3", EnrollmentNo = "201404150003" });  
    return students;  
}

ViewModel is nothing but a single class that may have multiple models. It contains multiple models as a property. It should not contain any method.

ViewModel is passed to the view as a model. To get intellisense in the view, we need to define a strongly typed view.

public class ViewModel  
{  
    public IEnumerable<Teacher> Teachers { get; set; }  
    public IEnumerable<Student> Students { get; set; }  
}

Controller code

public ActionResult IndexViewModel()  
{  
    ViewBag.Message = "Teacher & Student List in Single View";  
    ViewModel mymodel = new ViewModel();  
    mymodel.Teachers = GetTeachers();  
    mymodel.Students = GetStudents();  
    return View(mymodel);  
}

View code

...
@model ViewModel   
@{  
    ViewBag.Title = "Home Page";  
}  
<h2>@ViewBag.Message</h2>  
   
<p><b>Teacher List</b></p>  
   
<table>  
    <tr>  
        <th>Id</th>  
        <th>Code</th>  
        <th>Name</th>  
    </tr>  
    @foreach (Teacher teacher in Model.Teachers)  
    {  
        <tr>  
            <td>@teacher.TeacherId</td>  
            <td>@teacher.Code</td>  
            <td>@teacher.Name</td>  
        </tr>  
    }  
</table>  
   
<p><b>Student List</b></p>  
   
<table>  
    <tr>  
        <th>Id</th>  
        <th>Code</th>  
        <th>Name</th>  
        <th>Enrollment No</th>  
    </tr>  
    @foreach (Student student in Model.Students)  
    {  
        <tr>  
            <td>@student.StudentId</td>  
            <td>@student.Code</td>  
            <td>@student.Name</td>  
            <td>@student.EnrollmentNo</td>  
        </tr>  
    }  
</table>
Reference Article

Related posts:

How to get rows count in EntityFramework without loading contents
Convert List to List in one line in C#
How to make the default class type 'public' instead of 'internal' in Visual Studio
How to use ? : if statements with Asp.Net Razor
Post Views: 172

Post navigation

Average of all values in a column that are not zero in SQL
Update Column with row_number() in SQL

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

September 2023
M T W T F S S
 123
45678910
11121314151617
18192021222324
252627282930  
« Aug    

Most Viewed Posts

  • Get the First and Last Word from a String or Sentence in SQL (665)
  • Get the User Name and Domain Name from an Email Address in SQL (657)
  • How to select distinct rows in a datatable in C# (510)
  • Add Constraint to SQL Table to ensure email contains @ (428)
  • Average of all values in a column that are not zero in SQL (348)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (328)
  • Find numbers with more than two decimal places in SQL (306)
  • Confirm before process with ASPxButton in Devexpress (304)
  • ASPxGridView – Disable CheckBox based on condition in GridViewCommandColumn (277)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (275)

Recent Posts

  • How to remove all non alphanumeric characters from a string in C#
  • How to get the Xth Day of the Week of the Year in C#
  • How to get formatted JSON in C#
  • How to convert JSON to XML or XML to JSON in C#
  • How to use OUTPUT for Insert, Update and Delete in SQL
  • How to get the first and last date of the current year in SQL
  • How to solve extra blank page at end of Microsoft Reportviewer
  • How to Use Picture-in-Picture in Chrome Browser
  • How to add some content to the right side of CardHeader on Bootstrap
  • How to change star rating color on mouseover/out, mouseenter/leave with Javascript

Most Viewed Posts

  • Get the First and Last Word from a String or Sentence in SQL (665)
  • Get the User Name and Domain Name from an Email Address in SQL (657)
  • How to select distinct rows in a datatable in C# (510)
  • Add Constraint to SQL Table to ensure email contains @ (428)
  • Average of all values in a column that are not zero in SQL (348)

Recent Posts

  • How to remove all non alphanumeric characters from a string in C#
  • How to get the Xth Day of the Week of the Year in C#
  • How to get formatted JSON in C#
  • How to convert JSON to XML or XML to JSON in C#
  • How to use OUTPUT for Insert, Update and Delete in SQL

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter

© 2023 ErcanOPAK.com

Proudly powered by WordPress | Theme: Xblog Plus by wpthemespace.com