Я пытаюсь добиться простой вещи в Asp.Net Core. В Asp.Net Mvc это не было бы большой проблемой. У меня есть такой метод действий
public async Task<IActionResult> Create([Bind("Id,FirstName,LastName,Email,PhoneNo")] Customer customer)
{
if (ModelState.IsValid)
{
_context.Add(customer);
await _context.SaveChangesAsync();
TempData["CustomerDetails"] = customer;
return RedirectToAction("Registered");
}
return View(customer);
}
public IActionResult Registered()
{
Customer customer = (Customer)TempData["CustomerDetails"];
return View(customer);
}
Сначала я предполагал, что TempData работает по умолчанию, но позже понял, что его нужно добавить и настроить. Я добавил ITempDataProvider в автозагрузку. Официальный документ, кажется, описывает, что этого должно быть достаточно. Это не сработало. Затем я также настроил его для использования сеанса
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddSession(
options => options.IdleTimeout= TimeSpan.FromMinutes(30)
);
services.AddMvc();
services.AddSingleton<ITempDataProvider,CookieTempDataProvider>();
}
Следующая строка относится к методу Session in Configure Startup перед написанием app.UseMvc.
app.UseSession();
Это все еще не работает. Что происходит, я больше не получаю никаких исключений из-за использования TempData, которые у меня были раньше, когда я пропустил некоторую конфигурацию, но теперь метод действия create не может перенаправить на зарегистрированный метод. Метод Create выполняет всю работу, но RedirectToAction не имеет никакого эффекта. Если я удалю строку, которая назначает сведения о клиенте для TempData, RedirectToAction успешно перенаправляется на этот метод действия. Однако в этом случае метод зарегистрированного действия, очевидно, не имеет доступа к CustomerDetails. Что мне не хватает?
TempData["CustomerDetails"] = JsonConvert.SerializeObject(customer);
иvar customer = JsonConvert.DeserializeObject<Customer>((TempData["CustomerDetails"] ?? "").ToString());
? - person Win   schedule 23.03.2017