نمایش جزئیات با ViewModel در EF Core یک بخش جذاب و کلیدی در پروژههای EF Core 9 میباشد. این قسمت به ما این امکان را میدهد که اطلاعات خاصی را از دیتابیس استخراج کرده و به شکل کاربرپسند به نمایش بگذاریم. عملیات Details معمولاً در صفحات مشاهده جزئیات یک رکورد استفاده میشود. اما نکتهای که میخواهیم در این جلسه به آن توجه کنیم، این است که چگونه از ViewModel برای بهبود نحوه نمایش این اطلاعات استفاده کنیم.
ViewModel ابزاری است که به ما کمک میکند تا مدلهای پیچیدهتری از دادهها را برای نمایش در Viewها آماده کنیم. در این بخش، علاوه بر بررسی عملکرد عملیات Details، یاد میگیریم که چگونه میتوانیم اطلاعات مورد نیاز را به صورت ساختارمند و بهینهتری به کاربر نمایش دهیم.
در ابتدا، ممکن است این سوال پیش بیاید که چرا باید از ViewModel استفاده کنیم وقتی که مدل اصلی خود را داریم؟ جواب ساده است: ViewModel به ما این امکان را میدهد که تنها اطلاعات مورد نیاز برای نمایش را در اختیار View قرار دهیم، بدون اینکه به دیتابیس درخواستهای اضافی بزنیم یا از اطلاعات غیرضروری استفاده کنیم. این کار هم باعث بهینه شدن عملکرد اپلیکیشن میشود و هم کد ما تمیزتر و قابل نگهداریتر خواهد بود. حالا بیایید وارد جزئیات این عملیات بشویم و ببینیم که چه تغییراتی در کد و طراحی اپلیکیشن ایجاد میشود.
public async Task<IActionResult> Details(int? Id)
{
if (Id == null)
{
return NotFound();
}
var DeveloperM=await _context.developers.FindAsync(Id);
if(DeveloperM == null)
{
return NotFound();
}
var DeveloperVM = new DetailsDeveloperViewModel() {
Id=DeveloperM.Id,
Name=DeveloperM.Name,
Family=DeveloperM.Family,
Email=DeveloperM.Email,
Phone=DeveloperM.Phone,
RegisterDate=DeveloperM.RegisterDate,
};
return View(DeveloperVM);
}
public async Task<IActionResult> Delete(int? Id)
{
if (Id == null)
{
return NotFound();
}
var DeveloperM = await _context.developers.FindAsync(Id);
if (DeveloperM == null)
{
return NotFound();
}
var DeveloperVM = new DetailsDeveloperViewModel()
{
Id = DeveloperM.Id,
Name = DeveloperM.Name,
Family = DeveloperM.Family,
Email = DeveloperM.Email,
Phone = DeveloperM.Phone,
RegisterDate = DeveloperM.RegisterDate,
};
return View(DeveloperVM);
}
[HttpPost]
[ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int Id)
{
var DeveloperM = await _context.developers.FindAsync(Id);
if (DeveloperM == null) {
return NotFound();
}
_context.developers.Remove(DeveloperM);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}