• استفاده از چند Model در یک Razor در ASP.NET MVC 5 - قسمت دوم
استفاده از چند Model در یک Razor در ASP.NET MVC 5 - قسمت دوم
1395/09/15 - 14:05:40 // MVC 5 & 6 // 0 نظر // 590 بازدید

در قسمت قبلی چند روش از روشهای ارسال بیش از یک Model به View را بررسی نمودیم و این قسمت دوم و پایانی مبحث خواهد بود.

بسمه تعالی

ادامه معرفی روشهای ارسال بیش از یک Model به View را از اینجا دنبال فرمایید.

3- استفاده از ViewData

این روش هم بسیار تا حدودی زیادی رواج داشته و استفاده از آن به شکل زیر است.
  1. public ActionResult IndexViewData(){  
  2.     ViewBag.Message = "Welcome to my demo!";  
  3.     ViewData["Teachers"] = GetTeachers();  
  4.     ViewData["Students"] = GetStudents();  
  5.     return View();}  

وضعیت View نیز به شکل زیر خواهد بود.

<table>

<tr>

<th>Id</th>

<th>Code</th>

<th>Name</th>

</tr>

@foreach (Teacher teacher in 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 students)

{

<tr>

<td>@student.StudentId</td>

<td>@student.Code</td>

<td>@student.Name</td>

<td>@student.EnrollmentNo</td>

</tr>

}

</table>

4- روش استفاده از Viewbag

شکل Controller به شکل زیر خواهد بود.

  1. public ActionResult IndexViewBag()  
  2. {  
  3.     ViewBag.Message = "Welcome to my demo!";  
  4.     ViewBag.Teachers = GetTeachers();  
  5.     ViewBag.Students = GetStudents();  
  6.     return View();  
  7. }  
 

و Viewباید مطابق شکل زیر باشد.

@using MultipleModelInOneView;

@{

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 ViewBag.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 ViewBag.Students)

{

<tr>

<td>@student.StudentId</td>

<td>@student.Code</td>

<td>@student.Name</td>

<td>@student.EnrollmentNo</td>

</tr>

}

</table>

 

5- روش استفاده از Tuple

این روش تا حدودی جدید است و استفاده از آن بسیار زیبا و بر اساس تکنولوژی جدید C# خواهد بود.

شکل Controller و Action Method لازمه به شکل زیر خواهد بود.

  1. public ActionResult IndexTuple(){  
  2.     ViewBag.Message = "Welcome to my demo!";  
  3.     var tupleModel = new Tuple<List<Teacher>, List<Student>>(GetTeachers(), GetStudents());  
  4.     return View(tupleModel);}  

حال وضعیت View به شکل زیر خواهد بود.

@using MultipleModelInOneView;

@model Tuple < List<Teacher>, List <Student>>

@{ 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.Item1)

{

<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.Item2)

{

<tr>

<td>@student.StudentId</td>

<td>@student.Code</td>

<td>@student.Name</td>

<td>@student.EnrollmentNo</td>

</tr>

}

</table>

 

6- استفاده از RenderAction و PartialView

در این روش وضعیت Controller به شکل زیر خواهد بود.

  1. public ActionResult PartialView()  
  2. {  
  3.     ViewBag.Message = "Welcome to my demo!";  
  4.     return View();  
  5. }  
  6.   
  7. /// <summary>  
  8. /// Render Teacher List  
  9. /// </summary>  
  10. /// <returns></returns>  
  11. public PartialViewResult RenderTeacher()  
  12. {  
  13.     return PartialView(GetTeachers());  
  14. }  
  15.   
  16. /// <summary>  
  17. /// Render Student List  
  18. /// </summary>  
  19. /// <returns></returns>  
  20. public PartialViewResult RenderStudent()  
  21. {  
  22.     return PartialView(GetStudents());  
  23. }  
 

در Index View وضعیتی مشابه زیر خواهیم داشت.

@{ ViewBag.Title = "PartialView";

<h2>@ViewBag.Message</h2>

<div>

@{ Html.RenderAction("RenderTeacher");

Html.RenderAction("RenderStudent"); }

</div> 
 
 

وضعیت PartialView ها به شکل زیر خواهد بود.

RenderTeacher.cshtml

@using MultipleModelInOneView;@model IEnumerable

<MultipleModelInOneView.Teacher>

<p><b>Teacher List</b></p>

<table>

<tr>

<th>Id</th>

<th>Code</th>

<th>Name</th>

</tr>

@foreach (Teacher teacher in Model)

{

<tr>

<td>@teacher.TeacherId</td>

<td>@teacher.Code</td>

<td>@teacher.Name</td>

</tr>

}

</table>

 

RenderStudent.cshtml
 

@using MultipleModelInOneView;@model IEnumerable

<MultipleModelInOneView.Student>

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

{

<tr>

<td>@student.StudentId</td>

<td>@student.Code</td>

<td>@student.Name</td>

<td>@student.EnrollmentNo</td>

</tr>

}

</table>

در Controller دو Action Method سبب صدا زده شدن و مقدار گرفتن و نمایش دو PartialView ایجاد شده خواهد گردید.

 
علی کلاهدوزان
معرفی نویسنده : علی کلاهدوزان

سلام بر دوستان ،
شاید رایج است به عنوان پروفایل کاربر ، چند خطی راجع به خودم بنویسم ، ولی وضعیت کاری و سوابق من با یک جستجوی ساده در گوگل مشخص خواهد شد ، لذا سرتان را با مطالب بی مورد به درد نیاورم بهتر است . اگر نکته خاصی لازم بود بدانید در قسمت "ایلیا سافت در یک نگاه" به احتمال زیاد یافت خواهد شد . جزئیات بیشتر را سوال کنید ، آدرس ایمیل Ali@Kolahdoozan.com همیشه جوابگوی شماست .امیدوارم از مطالب سایت استفاده کرده باشید . شاد و پیروز باشید .

امتیاز به مطلب
           
برچسب ها
Multiple Model MVC5 Tuples 
نظرات کاربران
ارسال نظر