我正在尝试使用如下参数执行RedirectToAction:
return RedirectToAction("Index", "CPLCReservation", new { data = cp_sales_app_lc });
我正在尝试将数据传递给CPLCReservation控制器的索引方法。
当我在RedirectToAction上设置断点时,我可以看到填充cp_sales_app_lc,当我转到CPLCReservation控制器的Index方法时:
public ActionResult Index(CP_Sales_App_LC data)
{
return View(data);
}
数据为空。我传递数据错了吗?
cp_sales_app_lc是CP_Sales_App_LC的类变量,其定义如下:
CP_Sales_App_LC cp_sales_app_lc = new CP_Sales_App_LC();
我希望这一切都有道理。
答案 0 :(得分:1)
RedirectToAction
通过HTTP状态代码处理(通常为302)。从HTTP 1.1开始,这些重定向始终通过HTTP动词GET
完成。
将对象传递给url参数data
将不会调用任何序列化代码。 (GET
仅处理URL,因此只处理字符串)。您必须序列化您的对象才能将其与RedirectToAction
一起使用。
另一个选择是直接调用action方法:
// Assuming both actions are in the CLPCReservationController class
public ActionResult SomeOtherEndpoint() {
// return RedirectToAction("Index", "CPLCReservation", new { data = cp_sales_app_lc });
return Index(cp_sales_all_lc);
}
答案 1 :(得分:0)
在这种情况下,您可以将参数捕获为字符串:`
public ActionResult Index(string data)
{
return View(data);
}
或者您可以执行以下操作:
public ActionResult SomeAction()
{
TempData["data"]= new CP_Sales_App_LC();
return RedirectToAction("Index", "CPLCReservation");
}
public ActionResult Index()
{
CP_Sales_App_LC data = (CP_Sales_App_LC)TempData["data"];
return View(data);
}
答案 2 :(得分:0)
如果数据是简单的var类型,例如字符串或整数,则可以调用:
return RedirectToAction("Index", "CPLCReservation", new { data = cp_sales_app_lc });
但是,如果您的var很复杂,例如包含许多项目的类,则可以使用use
ViewBag.data = cp_sales_app_lc
return RedirectToAction("Index", "CPLCReservation");
然后在CPLCReservation控制器上调用视图模型
CP_Sales_App_LC data = (CP_Sales_App_LC)ViewModel.data;
return View(data);
传输复杂的模型,如@Vadym Klyachyn所说。
您也可以像这样直接调用操作
return Index(cp_sales_all_lc);
,但是请记住,如果后面有更多代码,它将返回并执行该代码。它不会离开调用它的控制器。
我认为,如果您不需要新的控制器,最好的方法是仅使用与该模型具有相同控制器的新View:
return View("newViewToDisplaydata", cp_sales_all_lc)