在Asp.Net Core中忽略RedirectToAction

问题描述 投票:0回答:1

我在asp.net核心开发一个crud应用程序,在我使用RedirectToAction时添加记录后添加ActionResult然后它不会重定向到该操作。

当请求是GET时它确实重定向,但是在POST的情况下它没有。

以下是我的代码:

public IActionResult Add(AuditSchedules model)
    {
        try
        {
            int ScheduleID;
            int TotalDays;
            DateTime start;
            List<SelectListItem> li = new List<SelectListItem>();
            TempData["state"] = util.Get_State();
            TempData["branch"] = li;
            TempData["Catg"] = ctx.CategoryMaster.Select(x => new SelectListItem { Text = x.CategoryName, Value = x.CategoryId.ToString() }).ToList();
            int count = 0;
            if (HttpContext.Request.Method == "POST")
            {
                using (var ctx = new QuestionnaireEntities())
                {
                    count = ctx.AuditSchedules.Where(x => (x.State == model.State) &&
                                                            (x.Branch == model.Branch) &&
                                                             (x.StaffId == model.StaffId) &&
                                                              (x.FromDate == model.FromDate)).Count();
                }
                if (count <= 0)
                {
                    TotalDays = (int)(model.ToDate.Subtract(model.FromDate)).TotalDays + 1;
                    start = model.FromDate;
                    model.CreatedBy = HttpContext.Session.GetString("UserName");
                    model.Icon = util.GetIcon(model.CategoryId);
                    model.CreatedDate = DateTime.Now;
                    model.IsCompleted = "N";
                    using (var ctx = new QuestionnaireEntities())
                    {
                        ctx.AuditSchedules.Add(model);
                        //ctx.SaveChanges();
                        ScheduleID = model.ScheduleId;
                        for (int i = 0; i < TotalDays; i++)
                        {
                            AuditSubSchedule subModel = new AuditSubSchedule();
                            subModel.ScheduleId = ScheduleID;
                            subModel.ScheduleDate = start;
                            ctx.AuditSubSchedule.Add(subModel);
                            //ctx.SaveChanges();
                            start.AddDays(1);
                        }
                    }
                    TempData["Msg"] = "Schedule For " + model.StaffName + " Created Successfully";
                    return RedirectToAction("Index", "Schedules");
                }
                else
                {
                    TempData["Msg"] = "Schedule AllReady Exist , Try a Different Combination <br> [ Hint : Different State , Branch , StaffID , Fromdate]";
                    return RedirectToAction("Index", "Schedules");
                }
            }
        }
        catch (Exception ex)
        {
            logger.LogError(ex);
        }
        finally
        {

        }
      return View(model);
    }

添加记录后,我使用返回RedirectToAction(“索引”,“计划”);但它什么都没做。当请求是Get类型而不是它运行良好时,但是当我将模型发布到它而不是重定向时。

事实上它在MVC5中运行良好(无论是GET请求还是POST)如何在ASP.Net Core中重定向?

更新一个发布网络选项卡响应enter image description here

发布网络选项卡响应后

enter image description here

更新两个

enter image description here

enter image description here

在网络日志中显示未找到添加的位置,

c# asp.net-mvc asp.net-core-mvc
1个回答
3
投票

你使用TempData,结合ASP.NET核心defaults使用CookieTempDataProvider的事实是你的问题的原因。

基本上,您正在尝试将大型对象序列化为cookie。得到的cookie是too large - 导致500(这是非常难以诊断的,因为你经历过 - 因为return RedirectToAction("Index", "Schedules");调用似乎执行正常)。

因此,RedirectToAction是一个红鲱鱼 - 它是无关的。对TempData的多重任务是真正的原因 - 可能主要是这一点:

TempData["Catg"] = ctx.CategoryMaster.Select(x => new SelectListItem { Text = x.CategoryName, Value = x.CategoryId.ToString() }).ToList();

您可能希望使用不同的ITempDataProvider实现(例如SessionStateTempDataProvider)。或者完全避免使用TempData

MVC5不会发生此问题,因为它不使用CookieTempDataProvider

© www.soinside.com 2019 - 2024. All rights reserved.