استفاده از ViewBag قبل از دستور Redirect در Asp.net core
در بخشی از پروژه خودم که با Asp.net core هست قصد دارم موقع Redirect از دستور Viewbag استفاده کنم.
در حالت عادی به شکل زیر میشد از Viewbag استفاده کرد
ViewBag.msg = "value";
return View();
اما هدف من استفاده از ViewBag قبل از دستور Redirect در Asp.net core چون نمیتونم از دستور بالا استفاده کنم.
ViewBag.msg = "value";
return Redirect("CourseDetails");
از دستور بالا برای این کار استفاده می کنم اما در ویوی CourseDetails مقدار ViewBag برابر با null هست.
لطفا بفرمایید استفاده از ViewBag قبل از دستور Redirect در Asp.net core چجوری هست؟
پاسخ هوش مصنوعی
در ASP.NET Core، وقتی شما از دستور Redirect استفاده می کنید، خواص ViewBag به دلیل اینکه در حال انجام یک درخواست جدید هستید، از بین می روند. برای ارسال داده ها به صفحه ی دیگر (ویو) قبل از Redirect، می توانید از روش های زیر استفاده کنید:
1. استفاده از TempData:
می توانید به جای ViewBag از TempData استفاده کنید که برای نگهداری داده ها بین درخواست ها طراحی شده است. به این صورت:
TempData["msg"] = "value";
return Redirect("CourseDetails");
و در ویوی CourseDetails به شکل زیر به TempData دسترسی پیدا کنید:
@if (TempData["msg"] != null)
{
@TempData["msg"]
}
2. استفاده از Query String:
روش دیگر این است که داده ها را از طریق Query String به URL اضافه کنید:
return RedirectToAction("CourseDetails", new { msg = "value" });
سپس در Action مربوط به CourseDetails می توانید آن را دریافت کنید:
public IActionResult CourseDetails(string msg)
{
ViewBag.msg = msg;
return View();
}
با این روش ها می توانید داده ها را در هنگام ری دایرکت ارسال کرده و در ویوی مقصد دریافت کنید.
کاربرد ViewBag
از ViewBag برای انتقال اطلاعات از کنترلر به View استفاده می شود و نکته اینجاست که ViewBag ها فقط در همان اکشن یا در همان Request جاری فعال هستند و در صورتی که اطلاعات درون ViewBag از یک اکشن به اکشن دیگری منتقل شود مقدار آن هم null می شود. در این زمینه توصیه می کنم این مقاله که آموزش ViewBag و Viewdata هست رو مطالعه بفرمایید.
در سوال شما با توجه به اینکه شما از دستور Redirect استفاده می کنید پس عملا در حال انتقال از یک اکشن متد به اکشن متد دیگه ای هستید. پس طبیعتا مقدار viewbag طبق اصول null می شود.
استفاده از TempDate
در این حالت شما باید از TempData استفاده کنید. برای این منظور به کد زیر دقت کنید
TempData["msg"] = "value";
return Redirect("CourseDetails");
در قطعه کد بالا مقدار در TempData با کلید msg نگهداری می شود. حالا برای دریافت این مقدار در اکشن متد دیگر میتونید به صورت زیر عمل کنید
ViewBag.msglogin = TempData["msg"];
return View(model);
به همین راحتی میتونید مقدار TempData رو در اکشن متد دیگه درون یک ViewBag نگهداری کنید و از مقدار ViewBag در ویو استفاده کنید. این لینک رو هم مطالعه بفرمایید
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2