TGViewer
DotNetZoom DotNetZoom @dotnetzoom · 2.82K subscribers
Post #1233 2.71K
DotNetZoom حاصل 2تا نصفه روز و رفتن با RazorPages شده پیدا کردن 2تا باگ ساده و بدیهی (که توی فیلم میتونین ببینین) همینطوری ادامه بدم باگ های بیشتری هم پیدا میکنم احتمالا چون خیلی سادس احتمالا قبلا issue هاش تو گیتهاب زده شده ولی بازم چک میکنم و اگه نبود گزارش میدم تازه…
توضیحات تکمیلی:

مشکل دوم که مشخصا باگ هست و نیاز به توضیح نداره.
و اما توضیح علت اصلی مشکل اول (همون مورد 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
More from @dotnetzoom
  1. Dec 27, 2021امکانات LINQ در NET 6. ✅ ۱- امکان مشخص کردن مقدار پیش‌فرض در OrDefault* var item1 = list1.…
  2. Dec 6, 2021انتقال داده ها به واسطه Azure Service Bus امروزه سرعت انتقال داده‌ها از اهمیت بالایی برخور…
  3. Nov 29, 2021اضافه شدن قابلیت Temporal Table به EF Core 6 ➖ مایکروسافت در سال 2016 قابلیت Temporal Tabl…
  4. Nov 10, 2021همه چیز در مورد NET Core 6. دیروز نسخه رسمی NET Core 6. به همراه نسخه رسمی Visual Studio 2…
  5. Nov 10, 2021نسخه نهایی NET 6.0 منتشر شد. نسخه 6.0 دات نت به صورت طولانی مدت پشتیبانی میشود (LTS) و توس…
  6. Nov 8, 2021کنفرانس NET. Conf هر سال خبرهای هیجان‌انگیزی داره. امسال هم NET. خبر های خوب و جذابی داره…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →