Introduction of Dynamic view model ASP.NET MVC using ExpandoObject
In this "Dynamic view model ASP.NET MVC using ExpandoObject" article I am going to explain about passing dynamic model to our view in mvc. Here I am trying to use "ExpandoObjects". This has been introduced in .NET 4.0 version. An ExpandoObject object helps us to add or remove members dynamically at runtime.
Note: This article is just to give a information on how we can use dynamic models in mvc using ExpandoObject. But I am strictly against this approach as we can handle these stuffs with different approach as well (without using "ExpandoObject", i will discuss those approaches in the coming weeks though).
Now lets dive in to the practical approach of using dynamic view model using ExpandoObject.
Lets create new classes - "Class" and "Student" to demonstrate this -
So as you can see in the above code snippet, data are populated for these classes and two properties "Classes" and "Students" are added to my dynamic expandoobject - "mymodelDetails".
So these "ExpandoObject" properties are used in the existing Index.cshtml as below -
After Executing this we get output like below -
Hope this article is useful.
In this "Dynamic view model ASP.NET MVC using ExpandoObject" article I am going to explain about passing dynamic model to our view in mvc. Here I am trying to use "ExpandoObjects". This has been introduced in .NET 4.0 version. An ExpandoObject object helps us to add or remove members dynamically at runtime.
Note: This article is just to give a information on how we can use dynamic models in mvc using ExpandoObject. But I am strictly against this approach as we can handle these stuffs with different approach as well (without using "ExpandoObject", i will discuss those approaches in the coming weeks though).
Lets create new classes - "Class" and "Student" to demonstrate this -
public class Class { public int ClassID { get; set; } public string ClassName { get; set; } } public class Student { public int StudentID { get; set; } public int ClassID { get; set; } public string StudentName { get; set; } }So now lets update the existing Homecontroller to use "ExpandoObject". So below is the updated code -
public ActionResult Index() { dynamic mymodelDetails = new ExpandoObject(); Listclasses = new List () { new Class() {ClassID =1, ClassName = "Class1"}, new Class() {ClassID =2, ClassName = "Class2"}, new Class() {ClassID =3, ClassName = "Class3"} }; List students = new List () { new Student() {StudentID = 100, ClassID =1, StudentName = "Student1"}, new Student() {StudentID = 101, ClassID =1, StudentName = "Student2"}, new Student() {StudentID = 102, ClassID =1, StudentName = "Student3"}, new Student() {StudentID = 103, ClassID =2, StudentName = "Student4"}, new Student() {StudentID = 104, ClassID =2, StudentName = "Student5"}, new Student() {StudentID = 105, ClassID =3, StudentName = "Student6"} }; //mymodelDetails.Classes = new { Classes = classes }.ToExpando(); //mymodelDetails.Students = new { Students = students }.ToExpando(); mymodelDetails.Classes = classes; mymodelDetails.Students = students; return View(mymodelDetails); }
So as you can see in the above code snippet, data are populated for these classes and two properties "Classes" and "Students" are added to my dynamic expandoobject - "mymodelDetails".
So these "ExpandoObject" properties are used in the existing Index.cshtml as below -
@model dynamic @{ ViewBag.Title = "Home Page"; }Class Details<table> <tr> <th>ClassID</th> <th>ClassName</th> </tr> @foreach (PassingDynamicModel.Models.Class c in Model.Classes) { <tr> <td>@c.ClassID</td> <td>@c.ClassName</td> </tr> } </table> <br/> <br />Student Details<table> <tr> <th>StudentID</th> <th>StudentName</th> </tr> @foreach (PassingDynamicModel.Models.Student s in Model.Students) { <tr> <td>@s.StudentID</td> <td>@s.StudentName</td> </tr> } </table>
After Executing this we get output like below -
Hope this article is useful.
You can also include Display Templates tutorial in this example itself and that would add to your explanation of ExpandoObjects (suggestion)
ReplyDeleteGood suggestion. Appreciated !! I will try to cover that in my coming posts..
ReplyDeleteWhat about sending. Synamic object from a view to action method??
ReplyDeleteIf you want to post the data then use either TextBox or Hidden or Editor controls like below -
Delete@HTML.TextBoxFor(c => c.ClassID)
@HTML.TextBoxFor(c => c.ClassName)
and in post method you can use "FormCollaection" to get these values.