我在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中重定向?
发布网络选项卡响应后
更新两个
在网络日志中显示未找到添加的位置,
你使用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
。