ViewBag و ViewData برای انتقال داده ها از کنترلر – Controller به ویو – View مورد استفاده قرار میگیرند. در اصل ViewData یک دیکشنری از ابجکت ها – dictionary of objects میباشد. و بر اساس Key – Value کار میکند. ViewData یکی از property های controller است، که نمونه ای از کلاس ViewDataDictionary را نمایش میدهد. ViewBag بسیار شبیه ViewData است، در اصل یک Dynamic Property میباشد. ViewBag قادر به Set و Get کردن مقادیر به صورت داینامیک میباشد.
ViewBag در ASP.NET یک مکانیزم برای انتقال دادهها به صورت موقت است، که در مدل گنجانده نشدهاند. و برای انتقال دادهها از کنترلر به ویو به طور داخلی مورد استفاده قرار میگیرند. ViewBag یک property از نوع داینامیک در کلاس ControllerBase است. که کلاس پایهی Controller میباشد.
ویو بگ این امکان را میدهد که مقادیر مختلفی را بدون نیاز به تعریف قبلی، به ViewBag اضافه کنیم و در ویو به آنها دسترسی پیدا کنیم. اما، باید توجه داشت که ViewBag فقط برای انتقال داده از کنترلر به ویو است و نه برعکس، و مقادیر آن در صورت انجام ریدایرکت (redirection)، null خواهند شد.
ViewBag یک پراپرتی Property پویا یا Dynamik از کلاس Controller هست ، پس در هر کلاسی که از کلاس Controller ارث بری می کند می توان از این پراپرتی پویا استفاده کرد.
نحوه تعریف ViewBag در Action
public IActionResult Index()
{
ViewBag.Name = "TehranIT.Net";
ViewBag.Time= DateTime.Now;
return View();
}
نحوه نمایش ViewBag در View
<span>Name : </span> @ViewBag.Name
<br />
<span>Time : </span> @ViewBag.Time
ViewData یک مکانیزم در ASP.NET میباشد، که برای انتقال دادهها از کنترلر به ویو استفاده میشود. این مکانیزم برای ارسال دادهها از کنترلر به ویو در الگوی طراحی MVC استفاده میشود. معمولاً برای ارسال دادهها از کنترلر به ویو از ViewData استفاده میشود. ViewData یک متغیر dynamic است که از آن برای ذخیره و ارسال داده به ویو استفاده میشود. در کنترلر، میتوانید دادههای مورد نیاز را به ViewData اضافه کنید، سپس این دادهها در ویو قابل دسترسی خواهند بود.
ViewData یک متغیر پویا یا Dynamik از کلاس Controller هست ، پس در هر کلاسی که از کلاس Controller ارث بری می کند می توان از این متغیر پویا استفاده کرد.
نحوه تعریف ViewData در Action
ViewData["Name"] = "TehranIt.Net";
نحوه نمایش ViewData در View
@ViewData["Name"]
ViewBag و ViewData هر دو برای انتقال دادهها از کنترلر به ویو مورد استفاده قرار میکیرند، اما تفاوتهایی نیز با هم دارند:
ViewData یک متغیر dynamic است که از آن برای ارسال دادهها از کنترلر به ویو استفاده میشود. ViewData به صورت یک دیکشنری از object ها میباشد برای دسترسی به دادهها در ویو، باید آنها را با استفاده از کلید مربوطه خواند.
ViewBag یک پراپرتی داینامیک است که از آن برای ارسال دادهها از کنترلر به ویو استفاده میشود. در واقع، ViewBag یک dynamic property bag است که به عنوان یک Wrapper برای ViewData عمل میکند و مقداردهی و دسترسی به دادهها را راحتتر میکند. با استفاده از ViewBag، نیازی به استفاده از کلیدها برای دسترسی به دادهها نیست و میتوان به صورت مستقیم به آنها دسترسی پیدا کرد.
بنابراین، تفاوت اصلی بین ViewData و ViewBag این است که ViewData یک دیکشنری است که باید با استفاده از کلیدها به دادهها دسترسی یابید، در حالی که ViewBag یک dynamic property bag است که به صورت مستقیم دسترسی به دادهها را فراهم میکند.