使用RedirectToAction传递TempData在Visual Studio中有效,但在生产中无效

时间:2018-11-22 01:12:36

标签: jquery visual-studio-2017 asp.net-core-mvc tempdata asp.net-core-mvc-2.1

Web应用程序ASP MVC Core 2.1 我有两个具有父子关系的模型,分别是Course和CourseEdition。一门课程可以有多个版本。

我显示“课程详细信息”的页面还显示了其版本列表。 我使用JQuery在同一页面上填充了该版本的详细信息:当单击其中一个版本时,我有一个DIV,其中填充了其详细信息数据。 我想结束某些动作(例如,在一个版本中招募一个或多个人),并重定向到“版本”详细信息。

我已经建立了这样的机制:

在控制器操作“ RegisterPeople”中,将TempData设置为要重定向到的版本ID,然后在CourseController中重定向到“ Details”操作。

[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 Action),我读了TempData并将其值复制到ViewBag中。

public async Task<IActionResult> Details(int? id)
{
    <do something>

    ViewBag.GotoEditionId = TempData["NextEditionId"] ;
    return View();
    }

在详细信息视图中,我有一个DIV,其数据属性由ViewBag值(版本ID)填充

<div id="GotoEditionId" data-ceid="@ViewBag.GotoEditionId">&nbsp;</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_CourseScripts");}
}

现在,在_CourseScript.cshtml中,单击此div会产生填充版本div的魔力,就会触发JQuery事件处理程序。

$(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();

0 个答案:

没有答案