Поле свойства возвращает нули - PullRequest
0 голосов
/ 31 декабря 2018

Мое приложение на стороне сервера / клиента имеет следующие контроллеры.Однако, когда я публикую / создаю резервирование, оно не удерживает / не кэширует значение свойства (id), возвращающего метод (CreatedAtAction(nameof(GetById), new{id=order.id}, order}, когда пост-действие выходит за рамки.Поэтому GetById(int id) не получает последний сгенерированный идентификатор, а показывает 0. Однако данные успешно фиксируются в базе данных с действительным идентификатором.

Контроллер на стороне сервера:

    [HttpGet("{id:int}")]
            public ActionResult<OrderTable> GetById(int id)
            {
                var order = _context.ReservationsTables.FirstOrDefault(o => o.Id == id);
                if(order == null)
                {
                    return NotFound();
                }
                else
                {
                    return order;
                }
            }
            [HttpPost]
            public ActionResult<OrderTable> CreateOrder(OrderTable order)
            {           
                _context.ReservationsTables.Add(order);
                _context.SaveChanges();
                return CreatedAtAction(nameof(GetById), new { id = order.Id }, order);
            }

Контроллер на стороне клиента:

 public async Task<IActionResult> CreatePostAsync(OrderTable order)
            {
                var httpClient = _clientFactory.CreateClient();
                HttpResponseMessage response = await httpClient.PostAsJsonAsync("https://localhost:44387/api/Reservation", order);
                if (response.IsSuccessStatusCode)
                {
                    var orderResult = await response.Content.ReadAsAsync<OrderTable>();
                    return RedirectToAction("ThankYouAsync", new { id = order.Id });
                }
                else
                {
                    return View("An error has occurred");
                }
            }
            public async Task<IActionResult> ThankYouAsync(int orderId)
            {
                var httpClient = _clientFactory.CreateClient();
                httpClient.BaseAddress = new Uri("https://localhost:44387/");
                HttpResponseMessage response = await httpClient.GetAsync("api/Reservation/" + orderId);

                if (response.IsSuccessStatusCode)
                {
                    var orderResult = await response.Content.ReadAsAsync<OrderTable>();
                    return View(orderResult);
                }
                else
                {
                    return View("An error has occurred");
                }
            }


 [HttpGet]
        public async Task<IActionResult> Create()
        {
            await PopulateRestaurantDropDownListAsync();
            return View();

        }

1 Ответ

0 голосов
/ 02 февраля 2019

Перенаправленное действие имеет следующую подпись

Task<IActionResult> ThankYouAsync(int orderId)

Обратите внимание, что имя параметра равно orderId.

Тем не менее, когда перенаправление выполнено,

return RedirectToAction("ThankYouAsync", new { id = order.Id });

объект значения определен new { id = order.Id }

Имена параметров должны совпадать, чтобы он работал должным образом.

Поэтому обновите RedirectToAction, чтобы использовать правильное имя свойства

return RedirectToAction("ThankYouAsync", new { orderId = order.Id });

Обратите внимание на new { orderId = order.Id } в объекте значения с соответствующим параметром orderId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...