7

Estoy intentando pasar mi modelo Lista < Modelos.Estado> listaDeDeclaración de una acción a otra, pero estoy recibiendo un valor nulo en el 2º controlador. Por favor, sugiera lo que está mal aquí. Incluso intentó con:pase el modelo de una acción a otra acción en el mismo controlador

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

Por favor ayuda.

public ActionResult SendPdfStatement(string InvoiceNumber) 
    { 
     try 
     { 
      InvoiceNumber = InvoiceNumber.Trim(); 

      ObjectParameter[] parameters = new ObjectParameter[1]; 
      parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber); 

      List<Models.Statement> statementList = new List<Models.Statement>(); 
      statementList = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>(); 

      //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<Models.Statement> 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"); 
     } 

    } 
+1

Por qué no hacer volver WriteInTemplate (statementList); ¿en lugar? Probablemente deberías mover la funcionalidad común en otro método. –

+0

@amit_g es correcto. simplemente "return WriteInTemplate (statementList);" También es un ActionResult, por lo que funcionará como se desee. –

Respuesta

1

RedirectToAction() escribe un comando de redirección al navegador, por lo que es iniciar una nueva solicitud a WriteInTemplate(). Por lo tanto, su objeto modelo se pierde.

¿Es WriteInTemplate() una acción independiente que a veces será responsable de una solicitud completa de un usuario o una solicitud parcial de una vista? De lo contrario, solo debe llamarlo como un método normal en lugar de usar RedirectToAction().

1

Esto se debe a que ha especificado parámetros de ruta incorrectos.

mientras pensaba en esto ... ¿comprobó que los datos no son nulos?

está utilizando

return RedirectToAction("WriteInTemplate", statementList); 

su lugar debe usar

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

véase la referencia here

+0

Dijo que estaba en el mismo controlador, por lo tanto, lo que tenía habría funcionado y está usando los parámetros correctos. –

3

eche un vistazo here to pass your Model

usted no está de paso "statementList", en vez estás pasando nuevo {statementList = sta tementList} acaba de pasar el modelo y deberías estar bien.

return RedirectToAction("WriteInTemplate", statementList); 

respuesta por Sino

Cuestiones relacionadas