توضیحات تکمیلی:
مشکل دوم که مشخصا باگ هست و نیاز به توضیح نداره.
و اما توضیح علت اصلی مشکل اول (همون مورد TempData) یه مقدار طولانیه و اگه دقیق تر بخوایم بگیم اسمش رو نمیشه باگ گذاشت. این مشکل حتی توی مروگر FireFox رخ نمیده ولی توی Chrome و Edge رخ میده که دلیل منطقی خودش رو هم داره.
ریشه اصلی این مشکل بر میگرده به عملکرد پشت صحنه اتریبیوت [TempData] که باعث میشه این مشکل وجود بیاد.
خلاصه اش اینکه وقتی از Property به همراه اتریبیوت [TempData] استفاده میکنین. توی هر request مقدار TempData به صورت خودکار bind میشه به Property مربوطه (حتی اگه نخواین) و از اونجایی که مروگر های بر پایه کرومیوم مثل Chrome و Edge همراه با ریکوست به مسیر root سایت، یه ریکوئست دیگه هم به آدرس /favicon جهت پیدا کردن آیکون سایت میزنن این مشکل پیش میاد که request دومی باعث bind شدن خودکار مقدار TempData به Property مربوطه میشه که باعث "خوانده" شدن مقدار از TempData و درنتیجه حذف شدن مقدار اون میشه.
درواقع ما توی ریکوئست /favicon نیاز نداریم مقدار TempData خونده بشه ولی چون خودکار این کار رو برامون انجام میده باعث میشه مقدارش حذف بشه.
و این همون دلیلی هست که اگر از TempData["Message"] به جای اتریبیوت [TempData] استفاده کنیم این مشکل برامون پیش نمیاد. چون اون attribute دیگه وجود نداره که بخواد سرِخود اون مقدار رو read کنه
دستور Keep هم چون باعث میشه پس از خونده شدن سرِخود مقادیر، باز هم اونها رو نگه داره، میتونه این ایراد رو دور بزنه.
یه نکته دیگه اینه که توی MVC قدیم. طول عمر TempData فقط به اندازه "یک درخواست" دیگر بود یعنی توی درخواست اول مقدار رو ست میکردیم و توی درخواست دوم میتونستیم بخونیمش. حالا اگه نمیخوندیم هم مقدارش از دست میرفت و برای جلوگیری از این کار باید از Keep استفاده میکردیم
ولی توی MVC Core این طول عمر تغییر کرده و مادامی که مقدار از TempData "خوانده" نشه مقدارش حذف نمیشه. ولی به محض اینکه خوانده شد مقدارش حذف میشه. یعنی اگه توی 10 تا درخواست هم مقدار اون رو نخونید، باقی میمونه و حذف نمیشه
حالا با توجه به اینکه اتریبیوت [TempData] خودکار مقدار رو read میکنه. شما فقط توی "یک درخواست" بعدی میتونین مقدار رو استفاده کنین و اگرم استفاده نکردین، اون کاری به اینا نداره و حذفش میکنه. (و برای جلوگیری ازش هم باید از متد Keep استفاده کنین)
__________________
@DotNetZoom
Post #1233
2.71K
DotNetZoom حاصل 2تا نصفه روز و رفتن با RazorPages شده پیدا کردن 2تا باگ ساده و بدیهی (که توی فیلم میتونین ببینین) همینطوری ادامه بدم باگ های بیشتری هم پیدا میکنم احتمالا چون خیلی سادس احتمالا قبلا issue هاش تو گیتهاب زده شده ولی بازم چک میکنم و اگه نبود گزارش میدم تازه…