ViewData vs ViewBag در ASP.NET Core MVC

ViewData vs ViewBag در ASP.NET Core MVC

ViewData vs ViewBag در ASP.NET Core MVC

اگر با ASP.NET Core MVC کار می‌کنی، احتمالاً با این دو مورد برخورد کردی:

ViewData و ViewBag

هر دو برای انتقال داده از Controller به View استفاده می‌شوند، اما یک تفاوت مهم در نحوه استفاده دارند.

1️⃣ ViewData چیست؟

ViewData یک Dictionary است که داده‌ها را با یک Key ذخیره می‌کند:

public IActionResult Index()
{
    ViewData["Title"] = "Product List";
    ViewData["Message"] = "Welcome to our store";

    return View();
}

و در View:

<h1>@ViewData["Title"]</h1>

<p>@ViewData["Message"]</p>

یعنی شما داده را با یک string key ذخیره و سپس با همان key دریافت می‌کنید.


2️⃣ ViewBag چیست؟

ViewBag یک روش ساده‌تر برای دسترسی به همان داده‌هاست:

public IActionResult Index()
{
    ViewBag.Title = "Product List";
    ViewBag.Message = "Welcome to our store";

    return View();
}

در View:

<h1>@ViewBag.Title</h1>

<p>@ViewBag.Message</p>

اینجا دیگر نیازی به ["Title"] نداریم.


تفاوت اصلی چیست؟

ViewDataViewBag
Dictionary استDynamic property است
استفاده با Keyاستفاده با Property
ViewData["Title"]ViewBag.Title
نیاز به Key داردخواناتر است
امکان خطای Key وجود داردامکان خطای نام Property وجود دارد

اما نکته مهم:

ViewBag و ViewData دو سیستم کاملاً جدا نیستند.

در ASP.NET Core MVC، ViewBag در واقع یک wrapper روی ViewData است.

یعنی:

ViewData["Title"] = "Products";

و:

ViewBag.Title = "Products";

به همان ViewData مربوط می‌شوند.

حتی می‌توانی این را انجام بدهی:

ViewData["Title"] = "Products";

و در View:

<h1>@ViewBag.Title</h1>

پس کدام را استفاده کنیم؟

برای داده‌های ساده و کوچک که فقط برای نمایش یا اطلاعات جانبی View هستند، هر دو قابل استفاده‌اند.

مثلاً:

ViewBag.PageTitle = "Products";
ViewBag.TotalProducts = 25;

اما برای داده اصلی صفحه، معمولاً بهتر است از Strongly Typed ViewModel استفاده کنی.

مثلاً به جای:

ViewBag.Products = products;

بهتر است:

public IActionResult Index()
{
    var model = new ProductViewModel
    {
        Products = products
    };

    return View(model);
}

و در View:

@model ProductViewModel

@foreach (var product in Model.Products)
{
    <p>@product.Name</p>
}

خلاصه

ViewData و ViewBag → برای داده‌های جانبی و ساده

ViewModel → برای داده اصلی و ساختاریافته View

اگر پروژه MVC واقعی می‌سازی، وابسته کردن View به تعداد زیادی ViewBag معمولاً خیلی زود کد را سخت‌تر می‌کند.

در قسمت بعدی می‌توانیم سراغ Partial View برویم و ببینیم چطور بخش‌های مشترک View را به کامپوننت‌های قابل استفاده مجدد تبدیل کنیم.

1 دیدگاه دربارهٔ «ViewData vs ViewBag در ASP.NET Core MVC»

دیدگاه‌ خود را بنویسید

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

پیمایش به بالا