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

در قسمت قبلی چند روش از روشهای ارسال بیش از یک 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 
نظرات کاربران
  • بهراد
    1397/04/29 - 12:38:06

    1
    0
    ممنونم بابت مطالب خوبتون اما من یه مشکلی که چندوقته ذهنمو درگیر کرده اینه که قبلا در asp.net windows form در صفحه mp.master.cs وجود داشت که با یک درخواست از پایگاه داده میتونستیم چندین جدول رو گرفته و کنترل های مربوطه بایند کنیم اما در mvc صفحه مشترکی برای ارسال چندین مدل به master layout view وجود ندارد !؟ دقت کنید منظورم استفاده از PartialView نیست چون از اون طریق فقط یک view میشه برگردون و برای بخشهای دیگه ناچار هستیم دوباره درخواستی به پایگاه داده بفرستیم لطفا اگه راه حلی به ذهنتون میرسه پاسخ بنده رو بدین با تشکر
  • بهراد
    1397/04/29 - 13:07:46

    0
    0
    ممنونم بابت مطالب خوبتون اما من یه مشکلی که چندوقته ذهنمو درگیر کرده اینه که قبلا در asp.net windows form در صفحه mp.master.cs وجود داشت که با یک درخواست از پایگاه داده میتونستیم چندین جدول رو گرفته و کنترل های مربوطه بایند کنیم اما در mvc صفحه مشترکی برای ارسال چندین مدل به master layout view وجود ندارد !؟ دقت کنید منظورم استفاده از PartialView نیست چون از اون طریق فقط یک view میشه برگردون و برای بخشهای دیگه ناچار هستیم دوباره درخواستی به پایگاه داده بفرستیم لطفا اگه راه حلی به ذهنتون میرسه پاسخ بنده رو بدین با تشکر
  • بهراد
    1397/04/29 - 13:49:27

    0
    0
    ممنونم بابت مطالب خوبتون اما من یه مشکلی که چندوقته ذهنمو درگیر کرده اینه که قبلا در asp.net windows form در صفحه mp.master.cs وجود داشت که با یک درخواست از پایگاه داده میتونستیم چندین جدول رو گرفته و کنترل های مربوطه بایند کنیم اما در mvc صفحه مشترکی برای ارسال چندین مدل به master layout view وجود ندارد !؟ دقت کنید منظورم استفاده از PartialView نیست چون از اون طریق فقط یک view میشه برگردون و برای بخشهای دیگه ناچار هستیم دوباره درخواستی به پایگاه داده بفرستیم لطفا اگه راه حلی به ذهنتون میرسه پاسخ بنده رو بدین با تشکر
  • nima
    1397/06/08 - 13:55:19

    0
    0
    با سلام و ممنون از زحمات شما بابت مطالب مفیدی که میزارین.سوالی که داشتم اینه که ما میتونیم دو یا چند مدل رو به یه ویو بفرستیم ولی باز هم جداولی که میبینیم یا اطلاعاتی که مشاهده میکنیم جدا از همه.حالا اگر بخواهیم جدول دانشجو و استاد رو داخل یه جدول نمایش بدیم مثلا بگیم فلان داشجو فلان درس رو با فلان استاد برداشته چجوری اینو انجام بدیم؟دنبال دستور linq ای میگردم که اینکارو انجام بده.ممنون میشم راهنمایی کنید
ارسال نظر