RedirectToAction重定向到错误的用户ID



编辑:我仍然遇到这个问题,但我已经解决了它,在2个用户配置文件上显示应用程序,而不是创建它的用户。然而,我仍然遇到重定向到错误ID的问题,我在网上找不到任何关于它的信息。重定向之前的所有断点都指向正确的ID,所以我真的很困惑。如下所述,我修改了我的视图包和变量以保持一致,但它并没有解决问题。


我有一个应用程序,允许用户将应用程序添加到他们的配置文件中。他们的配置文件将列出该用户所做的所有应用程序。该应用程序已在RouteConfig文件中配置为在UserId 1的配置文件中初始化该应用程序。

发生的情况是,如果我为UserId 1创建了一个应用程序,它会正常工作,将该应用程序添加到UserId 1的应用程序列表中并显示它。如果我创建了新用户(UserId 2),然后继续为该用户添加新应用程序,当应用程序提交到数据库时发生的重定向操作会将我带回UserId 1的页面,同时将应用程序添加到UserId 1列表以及创建它的UserId(在本例中为UserId 2)。我不确定为什么会发生这种情况,因为我明确告诉它从存储正确UserId的ViewBag中获取UserId。

如果我查看数据库,应用程序只有1条记录。我可以删除UserId 1的列表中的应用程序,它仍然存在于UserId 2的列表和数据库中。如果我通过UserId 2的页面删除它,它将从所有列表和数据库中删除该记录。这也适用于更新应用程序的详细信息。

当我在最后设置了一个断点时,控制器将获取UserId,然后将我重定向到该UserId的页面。它声明了需要重定向到的正确UserId的页面(在上面的场景中,它声明UserId为2)。但是,如前所述,它正在将我重定向到UserId 1。

如果我删除RouteConfig文件中初始化UserId 1中应用程序的路由,然后加载默认索引页,创建一个用户,然后创建一个应用程序,我会收到一个错误,说明System.NullReferenceException,因为我试图使用-<h2>User Profile for @Model.Name</h2>显示用户的名称,所以它不会获取UserId的详细信息。我也不确定为什么会发生这种情况,因为我认为RouteConfig文件纯粹是为了告诉应用程序在哪里进行初始化。

下面的代码,一些要点:

  • 这就是我将要提交应用程序时URL的样子=https://localhost:44313/Service/AddApplication?Course=Level1&DriverId=1&UserId=2
  • RoutesConfig正在发送到";GetUser"用户";,应用程序启动时为1
  • viewbags正在工作,因为我可以看到它在添加过程的最后获得了正确的UserId

添加应用程序的控制器操作

[HttpPost]
public ActionResult AddNewApplication(ApplicationAdd applicationAdd, string UserId, int DriverId)
{
try
{
// TODO: Add insert logic here
applicationService.AddApplication(applicationAdd, UserId, DriverId);
return RedirectToAction("GetUser", "User", new { UserId =  ViewBag.UserId });
}
catch
{
return View();
}
}

用户控制器中的GetUser操作:

public ActionResult GetUser(string id)
{
return View(userService.GetUser(id));
}

userService:中的GetUser操作

public User GetUser(string id)
{
using (var context = new MyContext())
{
return userDAO.GetUser(id, context);
}
}

userDAO:中的GetUser

public User GetUser(string id, MyContext context)
{
context.Users.Include(g => g.Applications).ToList();
return context.Users.Find(id);
}

RouteConfig文件路径:

defaults: new { controller = "User", action = "GetUser", id = 1 }

控制器操作,用于为用户提供显示应用程序列表的视图:

public ActionResult GetApplications(string id)
{
User user = userService.GetUser(id);
IList<Application> applications = user.Applications.ToList();
return View(applications);
}

尝试使用此

RedirectToAction("GetUser", "User", new { id =  ViewBag.UserId });

参数名称CCD_ 3需要与函数CCD_。

最新更新