خانه / برنامه نویسی / آموزش ASP.NET MVC برای مبتدیان-جلسه هشتم-واکشی اطلاعات از چند جدول
امدادگرافیک

آموزش ASP.NET MVC برای مبتدیان-جلسه هشتم-واکشی اطلاعات از چند جدول

در این جلسه در باره واکشی اطلاعات از چند جدول و ارتباط اونها با هم بحث خواهیم کرد.

لطفا حتما قبل از مطالعه این بخش، قسمت قبل رو مطالعه کنید.

آموزش ASP.NET MVC برای مبتدیان – مقدمه

آموزش ASP.NET MVC برای مبتدیان-جلسه اول

آموزش ASP.NET MVC برای مبتدیان-جلسه دوم

آموزش ASP.NET MVC برای مبتدیان-جلسه سوم

آموزش ASP.NET MVC برای مبتدیان-جلسه چهارم

آموزش ASP.NET MVC برای مبتدیان-جلسه پنجم

آموزش ASP.NET MVC برای مبتدیان-جلسه ششم

آموزش ASP.NET MVC برای مبتدیان-جلسه هفتم

در قسمت قبل لیست کارمندان رو واکشی کردیم و با کلیک روی هر کارمند به صفحه جزئیات کارمند هدایت شدیم، در این قسمت قراره ابتدا لیستی از بخش ها رو نمایش بدیم و با کلیک روی هر بخش کارمندانی که در اون قسمت کار میکنند رو نمایش بده، پس به یک جدول دیگه که عناوین قسمت ها رو داشته باشه نیاز داریم.
کار نهایی به صورتی هست که در زیر میبینید:

واکشی اطلاعات
واکشی اطلاعات

اجازه بدید کار رو شروع کنیم، ابتدا SQL Server رو باز کنید و به جدول tblEmployee یک فیلد جدید به نام DepartmentId اضافه کنید تا با استفاده از این فیلد تشخیص بدیم کارمند ما در کدام قسمت کار میکند.

حالا یک جدل دیگر به اسم tblDepartment به بانک اطلاعاتی اضافه میکنیم که فقط دو فیلد داره با نام های Id و Name که قراره قسمت های مختلف رو در خودش داشته باشه.

اطلاعات پیش فرضی رو به هر دوجدول بدید، دقت کنید که DepartmentId همون Id در جدول tblDepartment هست که مشخص میکنه کارمند در کدام قسمت کار میکنه.

و حالا ویژوال استادیو رو باز کنید و پروژه جلسه قبل رو لود کنید،اولین کاری که میکنیم مدل مربوط به قسمتها (tblDepartment) رو به پروژه اضافه میکنیم، برای این کار همونطور که در جلسات قبلی صحبت کردیم روی پوشه ی Models کلیک راست میکنیم و از زیر منوی Add روی Class کلیک میکنیم و در پنجره باز شده نام کلاس رو مینویسیم که در این پروژه نام Department رو انتخاب میکنیم.

به جدولی که در SQLServer درست کردیم دقت کنید، جدول tblDepartment دارای دو فیلد با نام های Id و Name است پس در مدل ما باید دو پراپرتی با همین نام ها رو اضافه کنیم.

public int Id { get; set; }
public string Name { get; set; }

 

دقت کنید که هر بخش یا قسمت (Department) میتونه یک یا چند کارمند رو داشته باشه پس باید یک پراپرتی دیگه از نوع لیستی از کارمندان به مدل اضافه کنیم :

public List<Employee> Employees { get; set; }

 

مورد بعدی که باید توجه کنیم اینه که نام جدول بانک اطلاعاتی ما tblDepartment است ولی مدل ما Department و قراره به جدول tblDepartment مپ بشه پس دوباره مثل جلسه قبل از خاصیت (Arrtibute) Table استفاده میکنیم :

[Table("tblDepartment")]

 

تا اینجا کار ما با مدل Department تمام شده است. حالا کلاس EmployeeContext رو باز کنید، میبینید که فقط یک DbSet برای Employee داریم پس یک DbSet هم برای Department باید اضافه کنیم :

public DbSet<Department> Departments { get; set; }

 

اگر یادتو باشه به جدول tblEmployee یک فیلد به نام DepartmentId اضافه کردیم اما به مدل اون اضافه نکردیم، پس کلاس Employee رو از پوشه Models باز کنید و پراپرتی DepartmentId رو به اون اضافه میکنیم :

public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }
        public int DepartmentId { get; set; }
    }

 

نوبت به ساخت کنترلر مربوط به Department رسیده، برای این کار مثل جلسات گذشته روی پوشه ی Controllers کلیک راست کرده و از زیر منوی Add گزینه ی Controller رو انتخاب کنید، نام این کنترلر رو DepartmentController میذاریم.

حالا باید اکشن متد Index رو تغییر بدیم، اگر یادتون باشه در قسمت قبل برای واکشی از بانک اطلاعاتی (واکشی لیست کارمندان) ابتدا یک نمونه از EmployeeContext رو درست کردیم تا کار اتصال به بانک اطلاعاتی ما رو انجام بده، سپس یک لیست از Employee درست کردیم و بعد با استفاده از LINQ و نمونه ای که از EmployeeContetx ساخته بودیم لیست کارمندان رو به لیستی که ساخته بودیم دادم و اون رو به ویو پاس دادیم، در اینجا هم کاری شبیه به همون رو باید انجام بدیم فقط بجای لیست کارمندان باید لیست قسمت ها رو بفرستیم :

public ActionResult Index()
        {
            var employeecontext = new EmployeeContext();
            List<Department> departments = employeecontext.Departments.ToList();

            return View(departments);
        }

 

حالا نوبت به ساخت ویو رسیده تا اطلاعات پاس داده شده رو رندر کنه و بازهم مثل جلسات گذشته روی اکشن متد Index کلیک راست کنید و گزینه Add View رو انتخاب کنید.نام ویو که همون Index میشه و گزینه Create a strongly-typed view رو هم فعال میکنیم و کلید Add رو میزنیم.

ویو ما ساخته شد، اولین کاری که میکنیم مدل رو به لیست تغییر میدیم و بعد عنوان صفحه رو به Department list تغییر میدیم، حالا به یک تگ ul برای ساختن لیست نیاز داریم و درون تگ ul هم از ActionLink Helper استفاده میکنیم تا کاربر رو به صفحه لیست کارمندان اون گروه یا قسمت هدایت کنیم. اینبار به دلیل اینکه باید به یک اکشن متد از یک کنترلر دیگه هدایت بشه از یک اورلود دیگه ای از ActionLink Helper استفاده میکنیم، کدهای ویو به شکل زیر در خواهند آمد :

@using MVCDemo.Models
@model List<Department>

@{
    ViewBag.Title = "Department List";
}
<h2>Department List</h2>
<ul>
    @foreach (var department in @Model)
    {
        <li>@Html.ActionLink(@department.Name,"Index","Employee",new {id = @department.Id},null)</li>
    }
</ul>

حالا کنترلر EmployeeController رو باز کنید تا تغییرات لازم رو در این کنترلر هم اعمال کنیم، در این قسمت قرار نیست تمام کارمندان برای ما نمایش داده شوند و تنها کارمندانی رو لازم داریم که در قسمت خواسته شده هستند، پس اکسن متد Index رو باید تغییر بدیم به صورتی که ابتدا پارامتر شماره قسمت (DepartmentId) رو از آدرس URL بگیره و سپس بر اساس این شماره کارمندان رو واکشی کنه، پس تغییرات به صورت زیر خواهند بود

public ActionResult Index(int id)
        {
            var employeecontext = new EmployeeContext();

            var employees = employeecontext.Employees.Where(emp => emp.DepartmentId == id).ToList();

            return View(employees);
        }

حالا وقتی پروژه رو اجرا کنید میبینید که به خوبی کار میکنه، فقط زمانی که درحال مشاهده جزوئیات یک کارمند هستید و روی لینک Back to list کلیک میکنیم با پیغام خطا مواجه میشیم و این به این دلیله که پارامتری به اکشن متد Index در کنترلر EmployeeController پاس داده نمیشه در صورتی که برای واکشی اطلاعات نیاز به اون پارامتر داره، پس ActionLink Helper ای که در ویو Details در زیر صفحه است رو به صورت زیر تغییر میدهیم :

@Html.ActionLink("Back to list","Index",new {id = @Model.DepartmentId})

پس کدهای ویو Details باید به صورت زیر یاشن :

@model MVCDemo.Models.Employee

@{
    ViewBag.Title = "Employee Details";
}

<h2>Employee Details</h2>

<table>
    <tr>
        <td>Employee Id</td>
        <td>@Model.EmployeeId</td>
    </tr>
    <tr>
        <td>Employee Name</td>
        <td>@Model.Name</td>
    </tr>
    <tr>
        <td>Employee Gender</td>
        <td>@Model.Gender</td>
    </tr>
    <tr>
        <td>Employee City</td>
        <td>@Model.City</td>
    </tr>
</table>
@Html.ActionLink("Back to list","Index",new {id = @Model.DepartmentId})

پروژه رو اجرا کنید، میبینید که تمام قسمت ها کار میکنند و مشکلی نداریم.

امیدوارم آموزشات ما به اندازه کافی ساده و روان باشند تا مشکلی برای دوستان پیش نیاد، هر سوالی هم بود خوشحال میشم بتونم جواب بدم.

فیلم آموزشی این جلسه رو هم برای شما قرار دادم میتونید از لینک زیر دانلود کنید :

دانلود فیلم آموزشی “آموزش ASP.NET MVC برای مبتدیان-جلسه هشتم-واکشی اطلاعات از چند جدول

یا حق.

 

 

مطلب پیشنهادی

کمپایلر زبان های برنامه نویسی

دانلود کمپایلر زبان های برنامه نویسی

کمپایلر زبان های برنامه نویسی AIDE مخفف محیط یکپارچه توسعه دهندگی اندروید می باشد. با ...

۶ دیدگاه

  1. باسلام
    ممنونم از آموزش بسیار خوبتون
    متاسفانه ویدئو حذف شده،
    برامن این ارورو میده ممنون میشم لطف کنید کمک کنید:
    The parameters dictionary contains a null entry for parameter ‘id’ of non-nullable type ‘System.Int32’ for method ‘System.Web.Mvc.ActionResult Index(Int32)’ in ‘_2.Controllers.EmployeeController’. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
    Parameter name: parameters

    پارامترهاشو هرکاری میکنم ارور میده

  2. ویدیو حذف شده چرا .. 🙁
    ممنون از تدریس خوبتون … ولی من پروژه رو انجام میدم با ارور مواجه میشم در صورتی که موبه مو کارهایی که گفتین رو انجام دادم
    Eror:
    The resource cannot be found.
    Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

    Requested URL: /

    • متاسفانه ویدیو حذف شده.
      خطایی که به شما نشون داده میشه احتمالا بخاطر نبود ویوو با آدرس درخواست شده هست. دقت کنید که آدرس درخواست شده ویو داشته باشه.
      در ضمن به خاطر اینکه در این دوره روی یک پروژه کار کردیم سعی کنید حتما از ابتدا انجام بدید(از جلسه اول)

  1. بازتاب ها: آموزش ASP.NET MVC برای مبتدیان-تابع UpdateModel در MVC

  2. بازتاب ها: استفاده از Business Objects به عنوان Models در MVC

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برای مشاهده محصولات به قسمت فروشگاه سایت مراجعه نمایید. رد کردن