未传递参数为的ASP.NET RedirectToAction
本文关键字:ASP NET RedirectToAction 参数 | 更新日期: 2023-09-27 18:13:46
我正在尝试使用以下参数执行RedirectToAction:
return RedirectToAction("Index", "CPLCReservation", new { data = cp_sales_app_lc });
我正在尝试将数据传递给CPLCReservation控制器的索引方法。
当我在RedirectToAction中放置一个断点时,当我转到CPLCReservation Controller的Index方法时,我可以看到cp_sales_app_lc被填充:
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();
我希望这一切都有意义。
RedirectToAction
通过HTTP状态代码处理(通常为302(。从HTTP1.1开始,这些重定向总是通过HTTP谓词GET
来完成。
将对象传递给url参数data
将不会调用任何序列化代码。(GET
只处理URL,因此只处理字符串(。您必须序列化您的对象才能将其与RedirectToAction
一起使用。
另一种选择是直接调用动作方法:
// 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);
}
在这种情况下,您可以将参数捕获为字符串:`
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);
}
如果数据是简单的var类型,如字符串或int,则可以调用:
return RedirectToAction("Index", "CPLCReservation", new { data = cp_sales_app_lc });
但是如果你的var很复杂,比如一个有很多项目的类,你可以使用
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);
但请记住,如果您在它之后有更多的代码,它将返回并执行该代码。它不会离开呼叫它的控制器。
我认为,如果你不需要一个新的控制器,最好的方法是只使用一个新视图,与该型号的控制器相同:
return View("newViewToDisplaydata", cp_sales_all_lc)