Как передать данные между двумя контроллерами - PullRequest
0 голосов
/ 05 апреля 2020

каким образом я могу передавать данные с одного контроллера на другой?

У меня есть это действие CheckReservation в HomeController:

public class HomeController : Controller
{

    public readonly ICarRepository _repository;

    public HomeController(ICarRepository repository)
    {
        _repository = repository;
    }

    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public IActionResult CheckReservation(Reservation reservation)
    {
        List<Car> availableCars = _repository.GetAvailableCars.Where(c => c.Location == reservation.PickUpLocation && c.Available);

        return RedirectToAction("List", "Car", availableCars);

    }
}

И у меня есть это действие Список в CarController:

public class CarController : Controller
{
    private readonly ICarRepository _repository;

    public CarController(ICarRepository repository)
    {
        _repository = repository;
    }

    [HttpPost]
    public IActionResult List(List<Car> cars = null)
    {
        if(ModelState.IsValid)
        {
            if(cars == null)
            {
                var carsListViewModel = new CarsListViewModel
                {
                    Cars = _repository.GetAllCars
                };
                return View(carsListViewModel);
            }
            else
            {
                return View(cars);
            }
        }

        return NotFound();

    }

    public IActionResult Detail(int id)
    {
        var car = _repository.GetAllCars.FirstOrDefault(c => c.Id == id);

        return View(car);

    }
}

Я попробовал этот способ, но у меня только список автомобилей без каких-либо элементов. Как правильно передавать данные между контроллерами?

Редактировать: Здесь найдено решение: ссылка

1 Ответ

0 голосов
/ 06 апреля 2020

Вы можете использовать TempData для передачи данных.

TempData ["Key"] = dataObject;

И доступ к тому же dataObject в другом контроллере

Данные объекта = TempData ["Key"] как объект;

Вы можете использовать tempdata для следующего запроса, используя метод Keep ().

...