دسته بندی ها
14:41 1398/10/04

استفاده از ViewBag قبل از دستور Redirect در Asp.net core

مشخصات سوال کننده :
کاربر : pedram_khan     امتیاز کاربر : 277     رتبه کاربر : 6
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2476
هوش مصنوعی

پاسخ هوش مصنوعی

در 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();
}

با این روش ها می توانید داده ها را در هنگام ری دایرکت ارسال کرده و در ویوی مقصد دریافت کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 20:24 1398/10/04

کاربرد 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 در ویو استفاده کنید. این لینک رو هم مطالعه بفرمایید

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود