当我尝试ReturnRedirect时,TempData被覆盖

时间:2016-07-06 01:11:16

标签: c# asp.net-mvc routes tempdata

我想在数据库中提交一些数据后重定向到上一页。我使用+1在当前页面上检索TempData,然后我会在页面上找到我要提交的表单(ID),但在which have an ID之后方法被触发POSTTempData覆盖,current page ID是带有表单的页面,我希望ReturnRedirect使用其ID进行初始页面。

这里是代码:

使用GET方法的控制器,我在其中检索ID:

var currentID = Url.RequestContext.RouteData.Values["id"];          
TempData["currentId"] = currentID;

使用POST方法的控制器,我尝试重定向:

if (ModelState.IsValid)
{
    // Editing records in database
    ....
    return RedirectToAction("Details", "Jobs", 
        new { controller = "JobsController", action = "Details", id = TempData["currentId"] });
}
ModelState.AddModelError("", "Something failed");
return View();

我正在使用这种方法,因为如果使用POST方法的当前操作没有ID,它会工作。

感谢您提出任何建议。

编辑:

我有工作细节:

    // GET: Jobs/Details/5
    public ActionResult Details(Guid id)
    {
        var currentID = Url.RequestContext.RouteData.Values["id"];          
        TempData["currentId"] = currentID;

        var currentUserTemp = LoggedUserId;
        TempData["userID"] = currentUserTemp;

        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Job job = db.Jobs.Find(id);
        if (job == null)
        {
            return HttpNotFound();
        }

        return View(job);
    }

但是从这个页面我想要一个链接到我编辑当前用户数据的页面。

查看详细信息页面代码:

@Html.ActionLink("Edit Company Details", "Edit", "UserAdmin", new { id = TempData["userID"] }, null)

现在我正在编辑用户页面,我编辑表单并使用保存按钮(触发POST方法)我想在详细信息页面上使用其他TempData变量ReturnRedirect,但由于这两个页面都有ID ,TempData被来自URL的最后一个ID覆盖,该ID是用户的ID而不是ID。

1 个答案:

答案 0 :(得分:1)

不要忘记TempData仅在HTTP请求期间存在。也许这是你的问题的线索(我无法在你的代码中找到控制器和视图之间的所有交互,所以我无法确定)。