انتقال اطلاعات در ASP.NET MVC-ViewData

هموانطور که در بخش اول مقاله "انتقال اطلاعات در ASP.NET MVC" گفتیم ، سه روش در asp.net mvc برای انتقال اطلاعات به برنامه نویس پیشنهاد می شود که در قسمت قبل به viewBag پرداختیم . در این مقاله خواهیم پرداخت به معرفی و نحوه استفاده از viewDate و اینکه چه تفاوت هایی بین ViewData و ViewBag وجود دارد .

ViewData :

viewData تقریبا مشابه به viewBag می باشد با این تفاوت که dynamic type نمی باشد . viewData از کلاس viewDataDictionary استفاده می کند ، این کلاس همانند کلاس HashTable  می باشد که داده های ذخیره شده در آن به صورت کلید / مقدار می باشند . viewData یک dictionary object می باشد که می توان اطلاعات را در آن قرار داد و در view آن اطلاعات را بر اساس کلید خواند . syntax آن به صورت key/value می باشد .

نحوه تعریف ViewData در ASP.NET MVC به صورت زیر تعریف شده است :

public ViewDataDictionary ViewData { get; set; }

در متد Index زیر یک ViewData را ساخته وتاریخ و زمان جاری را به عنوان مقدار در آن قرار داده ایم :

 public ActionResult Index()
        {
            ViewData["Currentdate"] = DateTime.Now;
            return View();
        } 

حال در view مربوطه (index.cshtml) اگر بخواهیم مقدار viewDataی فوق را بخوانیم به صورت زیر عمل خواهیم کرد: 

<h2>ViewData</h2>
<span>Current Date :</span> @ViewData["Currentdate"]

تا اینجای کار viewData با viewBag تفاوتی نداشته است ، اگر بخاطر داشته باشید در بخش اول ، در مقاله "انتقال اطلاعات در ASP.NET MVC" گفتیم که یکی از تفاوت های ViewData با ViewBag در تبدیل آن می باشد .در کدهای زیر ملاحضه میکنید که جهت به دست آوردن روز باید ابتدا viewData را به نوع مروبطه (DateTime) تبدیل کرد :

@(((DateTime)ViewData["Currentdate"]).DayOfWeek) 

در صورتی که با ViewBag نیازی به تبدیل آن نیست ، به صورت زیر با viewBag قابل انجام است :

<h3> @ViewBag.currentDate.DayOfWeek</h3> 

نکاتی در مورد ViewDate :

- همانند viewBag فقط مقدار آن در درخواست جاری می باشد . بعد از انتقال به یک view دیگر مقدار آن پاک می شود ، در صورتی که بخواهید به آن دسترسی داشته باشید مقدار null دریافت خواهید کرد.
 - نیاز دارد که تبدیل (Cast) شود . 

- ViewData همانند viewBag یک شی یک طرفه برای انتقال اطلاعات از سمت controller به سمت view می باشد و نمی توان  در View مقدار آن را تغییر داد .  کد های پایین باعث نمایش مقدار ViewData با رشته "hello" را در خروجی خواهد شد :

@ViewData["Currentdate"] = "hello"
@ViewData["Currentdate"] = "hello"<br />   

@* output =11/7/2014 1:45:27 AM="hello" *@

- Intellisense  در اختیار ندارید . 

مثال زیر تفاوت viewBag و viewData در را هنگا خواندن اطلاعات و  Castکردن  نشان می دهد :

  public ActionResult Index()
        {
            var Product = new Product
            {
                Name = "Asus x450LA",
                description = "The ASUS x450LA features an aluminum",
            };
            ViewData["Product"] =Product;
            ViewBag.Product =Product;
            return View();
        }

Index.cshtml

@using ControllersAndActions.Models;
@{
    var viewDataProduct = ViewData["Product"] as Product;
}
<h2>Index</h2>
<br />
<h4>@ViewBag.Product.Name</h4>
<h3>@viewDataProduct.Name</h3

 


توسط : عثمان رحیمی  4 ماه قبل ، جمعه 16 آبان 1393 ساعت 02:10  0  1890

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط