ارسال TempData به اکشن

آموزش MVC –> جلسه اول –> قسمت نهم

ارسال TempData به اکشن :

در مقاله قبل ، نحوه ریدایرکت به اکشن بهمراه ارسال پارامتر را یاد گرفتیم . با توجه به سناریوی گفته شده در انتهای مقاله قبل(آموزش MVC –> جلسه اول –> قسمت هشتم) میخواهیم پارامتر های مختلفی را با نامهای گوناگون به اکشن مقصد بفرستیم . 

TempData  مانند Session در ASP.NET webform عمل میکند . در اکشن مبدا داریم :

     public System.Web.Mvc.ActionResult Learn1180()
        {
            TempData[“MyNumber”] = 10;

            return (RedirectToAction(actionName: "Action4"));
        }

در اکشن Learn1180 اکشن مقصد را با پارامتر MyNumber صدا زدیم و ریدایرکت شدیم . ممکن است در اکشنی دیگر (Learn1190 ) بخواهیم اکشن مقصد را با متغیر دیگری مانند MyName صدا بزنیم :

   public System.Web.Mvc.ActionResult Learn1190()
        {
            TempData[“MyName”] = "Ehsan Safari";

            return (RedirectToAction(actionName: "Action4"));
        }

و در اکشن مقصد (Action4) پارامترهای فوق را بررسی میکنیم . اگر خالی نبودند آنرا چاپ میکنیم :

   public System.Web.Mvc.ActionResult Action4()
        {
            string strResult = string.Empty;

            if (TempData[“MyNumber”] != null)
            {
                int intMyNumber =
                    System.Convert.ToInt32(TempData[“MyNumber”]);

                strResult =
                    string.Format("My Number is {0}", intMyNumber);
            }

            if (TempData[“MyName”] != null)
            {
                string strMyName =
                    TempData[“MyName”].ToString();

                strResult =
                    string.Format("My Name is {0}", strMyName);
            }

            return (Content(strResult));
        }

نکته : متغیر TempData عمر محدودی دارد یعنی مثلا متغیر MyNumber تا وقتی که خروجی به کاربر نمایش داده نشده است زنده می ماند ! بعد از آن null می شود .

نگهداری مقدار TempData توسط دستور Keep :

برای نگهداری مقدار قبلی tempdata از دستور keep استفاده میکنیم . برای روشن شدن مطلب به مثال زیر توجه کنید :

دو اکشن به نامهای Learn 1190 و Learn1200 داریم که در اولی از keep استفاده نکردیم :

   public System.Web.Mvc.ContentResult Learn1190()
        {
            if (TempData[“MyNumber”] == null)
            {
                TempData[“MyNumber”] = 10;
            }
            else
            {
                TempData[“MyNumber”] =
                    (int)TempData[“MyNumber”] + 1;
            }

            return (Content(TempData[“MyNumber”].ToString()));
        }

با هر بار refresh شدن صحه مروگر مقدار MyNumber برابر با null می شود و دوباره مقدار ۱۰ میگیرد . در اکشن دومی یعنی Learn1200 از دستور keep استفاده کرده ایم :

   public System.Web.Mvc.ContentResult Learn1200()
        {
            if (TempData[“MyNumber”] == null)
            {
                TempData[“MyNumber”] = 10;
            }
            else
            {
                TempData[“MyNumber”] =
                    (int)TempData[“MyNumber”] + 1;
            }

            //TempData.Keep();
            TempData.Keep("MyNumber");

            return (Content(TempData[“MyNumber”].ToString()));
        }

بنابراین با هر بار بارگذاری صفحه مقدار قبلی در MyNumber می ماند و هر بار یکواحد به مقدار قبلیش اضافه می شود .

 نکته : می توان بعنوان مثال یک متغیر بنام age در اکشنی تعریف کنیم و آنرا keep کنیم و در اکشن دیگری از آن استفاده کنیم . به مثال زیر توجه کنید :

در اکشن Learn1210 متغیر age  را  در TempData تعریف کرده و آنرا keep میکنیم :

    public System.Web.Mvc.ContentResult Learn1210()
        {
            TempData[“Age”] = 10;
            TempData.Keep("Age");

             return (Content(TempData[“Age”].ToString()));
        }

و در اکشن دوم Learn1220 آن متغیر نگهداری شده یعنی Age را چاپ میکنیم :

   public System.Web.Mvc.ContentResult Learn1220()
        {
            if (TempData[“Age”] == null)
            {
                return (Content("Undefined!"));
            }
            else
            {
                return (Content(TempData[“Age”].ToString()));
            }
        }

در بار اولی که این اکشن اجرا می شود شرط if برابر false است و اجرا نمیشود و به else  میرود . در بار دوم به بعد چون آن متغیر را keep نکرده ایم مقدارش null میشود و شرط if برابر true میشود . برای کسب اطلاعات بیشتر به وب سایت asp.net مراجعه شود .

در مقاله بعد ، با پروتکلهای مهم Get و Post آشنا می شویم . همراه ما باشید …wink


تاریخ انتشار : ۲۵ آذر ۱۳۹۴



دیدگاه ها :