اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
در روزهای اولی که با MVC آشنا شدم، این سؤال برایم پیش میآمد که یک ViewBag چطور میتواند به صورت پویا مقادیر را داخل خودش نگهداری کند؟ بعد از جستجو مشخص شد که ViewBag در حقیقت یک شیء Dynamic است. در این نوشتار قصد داریم نحوهی کار یک ViewBag را نمایش دهیم. قبل از هر چیز باید بگویم که ViewBag تنها یک شیء dynamic نیست. اگر آن را از نوع dynamic تعریف و سپس یک شی را به آن Bind کنیم، در هنگام اجرای برنامه استثنای Cannot perform runtime binding صادر میشود. در حقیقت باید بگویم که ViewBag علاوه بر dynamic بودن، یک شیء از کلاس ExpandoObject است. با این تعاریف کلاس حاوی ViewBag ما بصورت زیر خواهد بود:
public class Controller { private dynamic _viewBage = new ExpandoObject(); public dynamic ViewBag { get { return _viewBage; } } }
حال برای استفاده از این ViewBag سفارشی کافی است تا کلاسی را تعریف کنیم که از کلاس پایه Controller ما ارث بری کند:
public class Sample : Controller { public void ShowViewBag() { ViewBag.Title = 11; Console.WriteLine(ViewBag.Title); ViewBag.Title = "T"; Console.WriteLine(ViewBag.Title); ViewBag.Title = false; Console.WriteLine(ViewBag.Title); ViewBag.Title = Math.PI; Console.WriteLine(ViewBag.Title); } } }
class Program { static void Main() { Sample s = new Sample(); s.ShowViewBag(); Console.ReadKey(); } }
خروجی حاصل از تکه کد بالا به صورت ذیل است: