Веб-приложение ASP MVC Core 2.1 У меня есть две модели с отношениями Родитель-Дети, это Course и CourseEdition;Курс может иметь много изданий.
На странице, где я отображаю сведения о курсе, также отображается список его изданий.Я использую JQuery, чтобы заполнить ту же страницу сведениями об издании: при нажатии на одно из изданий у меня появляется DIV, заполненный его подробными данными.Существуют действия (т. Е. Регистрация одного или нескольких человек в редакции), которые я хотел бы завершить перенаправлением на сведения о редакциях.
Я настроил механизм, подобный следующему:
ВДействие контроллера «RegisterPeople» Я устанавливаю TempData с идентификатором издания, на которое я хочу быть перенаправлен, затем перенаправляю на действие Details в CourseController.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> RegisterEmployees([Bind("CourseId,CourseEditionId,Subscribers")] RegistrationData regData)
{
TempData["NextCourseId"] = regData.CourseId;
TempData["NextEditionId"] = regData.CourseEditionId;
if (ModelState.IsValid)
{
<do something>
return RedirectToAction("Details", "Courses", new { id = regData.CourseId });
}
Здесь (контроллер курса, действие Details) Iпрочитайте TempData и скопируйте его значение в ViewBag.
public async Task<IActionResult> Details(int? id)
{
<do something>
ViewBag.GotoEditionId = TempData["NextEditionId"] ;
return View();
}
В подробном представлении у меня есть DIV с атрибутом данных, заполненным значением ViewBag (идентификатор издания),
<div id="GotoEditionId" data-ceid="@ViewBag.GotoEditionId"> </div>
@section Scripts {
@{await Html.RenderPartialAsync("_CourseScripts");}
}
Теперь в _CourseScript.cshtml обработчик событий JQuery запускается, когда нажатие на этот div делает магию заполнения div издания.
$(document).ready(function () {
$(document).on("click", "#GotoEditionId", function (e) {
e.preventDefault();
var params = {};
params["id"] = $(this).data("ceid");
$.ajax({
url: $("#GetEditionUrl").data('get-edition'),
type: "GET",
data: params,
success: function (result) {
$("#EditionBlock").html(result);
},
error: function (err) {
alert("error");
$("#EditionBlock").html(err.responseText);
}
});
});
var GotoEditionId = $("#GotoEditionId").data("ceid");
if (GotoEditionId > 0) {
$("#GotoEditionId").trigger("click");
}
})
Это прекрасно работает, пока я нахожусь в разработке с Visual Studio.Когда я выполняю развертывание на удаленном сервере IIS, TempData заполняется в действии «регистр», но при вводе в действии «Сведения» он оказывается пустым.
Кто является виновником?Почему TempData сохраняется в режиме разработки и исчезает в рабочей среде?
РЕДАКТИРОВАТЬ 1
Использование сеанса
В Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services
.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddSessionStateTempDataProvider()
.AddJsonOptions(config =>
{
config.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
services.AddSession();
.....
public void Configure(IApplicationBuilder app, Microsoft.AspNetCore.Hosting.IHostingEnvironment env)
{
....
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSession();