Todor Iliev Ответов: 1

Передача данных от контроллера к другому контроллеру


Мой вопрос заключается в том, есть ли способ передавать данные от одного контроллера к другому, более конкретно кэш-данные, и если да, то как ?

Я построил систему, которая может создавать заказы и сохранять их в кэше, чтобы я мог отображать их в своем представлении. Теперь у меня есть второй контроллер для ViewModel, куда мне нужно перенести данные кэша.

Что я уже пробовал:

Это мой контроллер, который работает нормально. У меня есть этот кэш памяти, но он предназначен только для этого контроллера. Мне нужно передать эти данные кэша другому контроллеру.

namespace sopro.Controllers
{
    public class BookingController : Controller
    {
        private static IMemoryCache _cache;
        private List<Booking> bookingsList;
        private List<Guid> cacheKeys;

        public BookingController(IMemoryCache memoryCache)
        {
            _cache = memoryCache;
            bookingsList = new List<Booking>();
            cacheKeys = Booking.guids;
        }

        public IActionResult Index()
        {
            if (_cache != null)
            {
                foreach (Guid guid in cacheKeys)
                {
                    var cacheKey = guid.ToString();
                    bookingsList.Add(_cache.Get<Booking>(cacheKey));
                }

            }

            ViewData["bookings"] = bookingsList;
            return View();
        }

        [HttpGet]
        public IActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public IActionResult Create(Booking newBooking)
        {
            if (ModelState.IsValid)
            {
                var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromSeconds(100));

                _cache.Set(newBooking.InstanceID.ToString(), newBooking, cacheEntryOptions);

                ViewBag.Success = "Booking was successfully created!"; 
                return View();
            }
            else
            {
                cacheKeys.Remove(newBooking.InstanceID);
                ModelState.AddModelError(string.Empty, "Booking was not created! Please enter correct booking details.");

                return View(newBooking);
                //return Content("Failed to create the product. Please try again");
            }
        }

    }
}

1 Ответов

Рейтинг:
7

F-ES Sitecore

Если это данные для каждого пользователя, то используйте объект "сеанс". Если данные являются глобальными, то используйте System.Web.Caching.Объект кэша

Класс Кэша (System.Web.Caching) | Microsoft Docs[^]


Todor Iliev

Спасибо, он работал с объектом кэша.