انتقال داده از Controllers به Views توسط ViewBag و ViewData – جلسه ۱۹

ViewBag & View Data - Session 19

در این جلسه از آموزش ASP.NET Core به بررسی انتقال داده از Controllers به Views توسط ViewBag و ViewData خواهیم پرداخت. به طور کلی Views از نظر دریافت و پردازش داده به دو نوع Strongly Typed View و Dynamic View تقسیم میگردد که در این جلسه Dynamic View و ارسال داده به این نوع نما (View) را بررسی خواهیم کرد.

مقایسه ViewBag و ViewData

  • ViewBag و ViewData برای انتفال داده از Controllers به Views مورد استفاده قرار میگیرد.
  • هر دو مورد برای انتقال داده در Dynamic View و یا همان Weakly Typed View مورد استفاده قرار میگیرند.
  • ViewBag برای ذخیره و بازیابی اطلاعات از Dynamic Property استفاده میکند، ولی ViewData از String Key
  • داده‌های منتقل شده توسط ViewBag نیازی به Data Casting ندارند در حالی که داده‌های غیر از رشته‌ایی (String) که توسط ViewData به View منتقل شده باشند نیاز به Data Casting دارند.
  • امکانات هوش مصنوعی (Intellisense) و خطایابی زمان کدنویسی ویژوال استودیو برای هر دو روش غیر فعال میباشد.

Dynamic View و Strongly Typed View چیست؟

Dynamic View و یا Weakly Typed View به نمایی (View) گفته میشود که به مدل (Model) خاصی متصل نباشد و اطلاعات از کنترلر توسط ViewBag و یا ViewData به View منتقل شده باشد. در این نوع نما، ویژوال استودیو قابلیت Intellisense وCompile Time Error را ارائه نمی دهد. در نتیجه امکان بروز خطای زمان اجرا (Run Time Error) بر اساس خطای نوشتاری (Syntax Error) وجود دارد.

Strongly Typed View نیز به نمایی (View) گفته میشود که به یک مدل (Model) متصل میباشد. ویژوال استودیو برای این نوع نما (View) قابلیت بررسی نوشتاری کد و Intellisense را ارائه میدهد. این قابلیت به برنامه نویس کمک میکند تا از برخی خطاهای زمان اجرا جلوگیری نماید. این نوع نما در مقایسه با Dynamic View دارای مزایای بسیاری میباشد که استفاده از آن توصیه میگردد.

ViewBag

یکی از روشهای ارسال داده از Controller به View استفاده از ViewBag میباشد. ViewBag برای ذخیره و بازیابی اطلاعات از Dynamic Property استفاده مینماید. داده هایی که توسط ViewBag به View منتقل شده اند نیازی به کستنگ (Data Casting) ندارند و میتوان به صورت مستقیم از آنها استفاده نمود.

public IActionResult Detail()
{
   ViewBag.Cost = costRepository.GetCostByID(1);
   ViewBag.PageTitle = "Cost Detail";
   return View();
}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <h1>@ViewBag.PageTitle</h1>
    <div>
        <div>
            ID: @ViewBag.Cost.ID
        </div>
        <div>
            Amount: @ViewBag.Cost.Amount
        </div>
        <div>
            Category: @ViewBag.Cost.Category
        </div>
        <div>
            Comment: @ViewBag.Cost.Comment
        </div>
    </div>
</body>
</html>

ViewData

روش دیگر انتقال داده به Dynamic View استفاده از ViewData میباشد. این روش بسیار شبیه به انتقال داده توسط روش ViewBag میباشد با این تفاوت که برای ذخیره و بازیابی اطلاعات به جای Dynamic Property از String Key استفاده مینماییم. داده‌های String در این روش هم نیاز به کستنگ ندارند ولی در صورت ارسال داده از نوع دیگر میباست آنرا کست نماییم.

public IActionResult Detail()
{
    ViewData["Cost"] = costRepository.GetCostByID(1);
    ViewData["PageTitle"] = "Cost Detail";
    return View();
}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <h1>@ViewData["PageTitle"]</h1>
    @{ 
        var cost = ViewData["Cost"] as DailyCostWebApplication.Models.Cost;
    }
    <div>
        <div>
            ID: @cost.ID
        </div>
        <div>
            Amount: @cost.Amount
        </div>
        <div>
            Category: @cost.Category
        </div>
        <div>
            Comment: @cost.Comment
        </div>
    </div>
</body>
</html>

در جلسه آینده در خصوص انتقال داده از Controllers به Views به صورت Strongly Typed View خواهیم پرداخت.

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

تماشای ویدیو در یوتیوب ما

دانلود اسلایدهای آموزشی این جلسه از اینجا

برچسب ها

5 2 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از
guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
0
افکار شما را دوست داریم، لطفا نظر دهید.x