gpt4 book ai didi

asp.net-mvc - 将类对象从一个 Controller 操作传递到 ASP.net MVC 4 中的不同 Controller 操作

转载 作者:行者123 更新时间:2023-12-04 23:55:09 25 4
gpt4 key购买 nike

我想将一个类对象从一个 Controller Action 传递给不同的 Controller Action 。

发件人操作

public class CourseController : Controller
{
[HttpPost]
public ActionResult CreateNewCourse(CourseViewModelBase courseViewModel)
{
if (ModelState.IsValid)
{
// Do some stuff
return RedirectToAction("CreateNewProject", "Project",
new { courseVM = courseViewModel});
}
// Bad happened
return View("CreateNewCourse", courseViewModel);
}

接收方操作
public class ProjectController : Controller
{
[HttpGet]
public ActionResult CreateNewProject(CourseViewModelBase courseVM)
{
// Use CourseVM data and do other stuff
return View("Create", projectCreateViewModel);
}
}

我在 中正确获取数据发件人操作 接收方操作 从重定向到 Action 调用正确调用。然而 courseVM 接收方操作 .

我知道这是一个非常古老的问题,并且被反复问过。但我发现大多数答案都建议使用 TempData并在 2008/2009 年得到答复。我相信会有某种方式使用 RedirectToAction without using TempData 传递数据.如果没有,那么我只会使用 TempData。

寻找
如果我传递一些简单的数据,例如 new {id = courseViewModel.CourseDuration}并将 Receiver action 中的参数更改为 id 然后正确接收 id。

类似问题
Question 1
Question 2
Question 3
Question 4
Question 5
Question 6, tried to use this one but did not workout
Question 7
Question 8
Question 9
Question 10

上述问题中的大部分答案可追溯到 2008/09 年,并使用临时数据。

最佳答案

这个问题本身现在大约有一年了,但我遇到了它,所以我想我会帮助将来遇到它的其他人。接受的答案不起作用 - 复杂对象仍然到达接收操作 null。

我发现 this answer从 2012 年开始仍然有效。您只是不能在 HttpGet 请求中传递复杂的对象(本质上这就是 RedirectToAction 的含义 - 同样,您不能更改)。您只能传递标量值:int、string 等。

确保您已排除以下两个选项:

  • 完全避免发送复杂的对象,只发送标量值。显然,这有时只是一种选择 - 但我提到它是为了提醒考虑它。
  • 完全跳过接收 Get 操作 - 执行其逻辑并直接从您的 Post 操作返回 View 。 IE; return View("ReceivingViewName", viewmodel)同样,仅适用于某些情况,您很可能需要其他操作,因此需要重定向,但值得记住的可能性。

  • 如果您无法解决问题,并且已经取消了上述两个选项,您的选项是:
  • 将数据保存到数据库中,如果您知道以后不会使用这些数据,则可能使用临时表。将主键发送到接收操作,并在那里查询数据库。这是“最干净”的选项。
  • [编辑选项] 将对象存储在 TempData(数据仅在下一个使用它的请求中持续 - 如果不使用,它将在 session 的生命周期中徘徊)或 session (数据在 session 的生命周期内持续)。两者都不是很好的选择。 TempData 可能是两者中更好的一个,因为它的生命周期可能更短......是我的场景)。对于这些特定场景,我最初建议从 TempData 中获取数据,然后将其放回原处,以便它可用于对该操作的后续请求。由于 TempData 实际上一直存在直到它被使用一次,这使得这个选项更不受欢迎,因为如果用户导航到其他地方它不会消失。答案中有关此的更多信息here .底线是不要在 TempData 中放置任何东西,除非您打算立即使用它。如果你不需要像分页这样的特定场景的数据,你把它放在 TempData 并立即在接收方法中使用它,而不把它放回去,这个选项是可以的。第一种选择仍然更好。
  • 关于asp.net-mvc - 将类对象从一个 Controller 操作传递到 ASP.net MVC 4 中的不同 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17616897/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com