7

Я пытаюсь передать свою модель Список < Models.Statement> 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<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

Почему бы не сделать возврат WriteInTemplate (statementList); вместо? Вероятно, вы должны переместить общую функциональность в другом методе. –

+0

@amit_g верен. просто «return WriteInTemplate (statementList)»; Это также ActionResult, поэтому он будет работать по своему желанию. –

ответ

1

RedirectToAction() записывает команду перенаправления в браузер, что делает его запустить новый запрос на WriteInTemplate(). Поэтому ваш объект модели теряется.

Is WriteInTemplate() Независимое действие, которое иногда будет отвечать за весь запрос от пользователя или частичный запрос из представления? Если нет, вы должны просто называть его как обычный метод, а не использовать RedirectToAction().

1

Это связано с тем, что вы неправильно определили параметры маршрута.

, думая об этом .. вы проверили, что данные не являются нулевыми?

вы используете

return RedirectToAction("WriteInTemplate", statementList); 

вместо этого вы должны использовать

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

см ссылка here

+0

Он сказал, что он в том же контролере, поэтому он бы работал и использует правильные параметры. –

3

Пожалуйста, обратите внимание here to pass your Model

вы не проходит "statementList", вместо вы передаете новый {statementList = sta tementList} просто передайте модель, и все будет хорошо.

return RedirectToAction("WriteInTemplate", statementList); 

Ответ на этот вопрос синусо

Смежные вопросы