将模型从一个动作传递到同一控制器中的另一个动作

我试图将我的模型List statementList从一个动作传递到另一个动作,但我在第二个控制器中接收空值。 请在这里建议有什么问题。 甚至试过:

return RedirectToAction("WriteInTemplate", new { statementList = statementList }); 

请帮忙。

  public ActionResult SendPdfStatement(string InvoiceNumber) { try { InvoiceNumber = InvoiceNumber.Trim(); ObjectParameter[] parameters = new ObjectParameter[1]; parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber); List statementList = new List(); statementList = _db.ExecuteFunction("uspInvoiceStatement", parameters).ToList(); //WriteInTemplate(statementList); return RedirectToAction("WriteInTemplate", statementList ); } catch (Exception e) { InvoiceSearchTool.Models.udtExceptionTable exception = new udtExceptionTable(); exception.MethodName = "SendPdfStatement"; exception.Exception = e.ToString(); exception.Date = DateTime.Now; DYNAMICS_EXTEntities db = new DYNAMICS_EXTEntities(); db.AddToudtExceptionTables(exception); db.SaveChanges(); return View("Error"); } } public ActionResult WriteInTemplate(List statementList) { try { string invoiceNumber = statementList.FirstOrDefault().Invoice.ToString().Trim(); ...................snip.......... return RedirectToAction("CreateMessageWithAttachment", "email", invoiceNumber); } catch (Exception e) { InvoiceSearchTool.Models.udtExceptionTable exception = new udtExceptionTable(); exception.MethodName = "WriteInTemplate"; exception.Exception = e.ToString(); exception.Date = DateTime.Now; DYNAMICS_EXTEntities db = new DYNAMICS_EXTEntities(); db.AddToudtExceptionTables(exception); db.SaveChanges(); return View("Error"); } } 

请看这里通过你的模型

你没有传递“statementList”,而是传递新的{statementList = statementList}只是传递模型,你应该没问题。

 return RedirectToAction("WriteInTemplate", statementList); 

回答sino

RedirectToAction()将重定向命令写入浏览器,使其开始向WriteInTemplate()发出全新的请求。 因此,您的模型对象将丢失。

WriteInTemplate()是一个独立的操作,有时会负责来自用户的整个请求或来自视图的部分请求吗? 如果没有,您应该将其称为常规方法,而不是使用RedirectToAction()

这是因为您已经指定了错误的路由参数。

在考虑这个问题时,你确定数据不是空的吗?

您正在使用

  return RedirectToAction("WriteInTemplate", statementList ); 

相反,你应该使用

 return RedirectToAction("WriteInTemplate","controllerName", new{"statementList"=stetementList}); 

请参考这里