我需要在两个动作结果之间传递一些数据,所以我想我会尝试TempData
(我对MVC很新,所以请耐心等待)。这就是我尝试过的:
public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
try
{
if (file != null)
{
//Do stuff with file, save changes to database etc.
TempData["Companies"] = companies;
return RedirectToAction("bgcTest2", "Companies");
现在存储临时数据。并检索它:
public ActionResult bgcTest2(string BolagsID, Companies companies)
{
try
{
companies = TempData["Companies"] as Companies;
int test = companies.BolagsID;
现在问题在于此; companies.BolagsID
有一个值,但test
始终为null。为什么?我该如何解决?
修改
我注意到了一件很奇怪的事情;当尝试Darin Dimitrovs的建议时,也许在我尝试的时候,如果我只在返回空值的行上放置一个断点,它就不会破坏直到后面的行。好像该行被注释掉并且根本不执行。欢迎来到暮光之城。
EDIT2:
拿2:
[HttpPost]
public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
try
{
if (file != null)
{
// non related stuff
return RedirectToAction("bgcTest2", "Companies", new {BolagsID = companies.BolagsID});
和
[Authorize]
public ActionResult bgcTest2(int BolagsID)
{
try
{
int test = BolagsID;
我仍然得到“当前上下文中不存在测试”。
EDIT3:
2件作品很好。声明后我的变量是null
,因为我从未在任何地方使用它们。我想我一步一步,但显然,在某些情况下,你必须采取几个步骤才能看到它们中的任何一个。
获得的经验:确保使用声明的变量,否则它们将是null
。
答案 0 :(得分:2)
我建议您不要使用TempData,因为它依赖于Session。如果只需要BolagsID
,那么只需将其作为参数传递:
public ActionResult Edit(Companies companies, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
try
{
if (file != null)
{
//Do stuff with file, save changes to database etc.
return RedirectToAction("bgcTest2", "Companies", new { BolagsID = companies.BolagsID });
然后:
public ActionResult bgcTest2(int bolagsID)
{
... use the bolagsID here directly
}
不幸的是,您无法使用此方法传递复杂对象。但是您可以将此对象保留在数据存储区中,并仅将id传递给目标控制器操作,以允许您在重定向后从此数据存储区中检索它。