передать модель из одного действия в другое в том же контроллере - PullRequest
7 голосов
/ 27 января 2012

Я пытаюсь передать свою модель 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<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");
        }

    }

Ответы [ 3 ]

3 голосов
/ 23 сентября 2013

Пожалуйста, посмотрите здесь, чтобы передать вашу модель

вы не передаете "StatementList", вместо этого вы передаете новый {StatementList = StatementList}, просто передайте модель, и вы должныхорошо.

return RedirectToAction("WriteInTemplate", statementList);

Ответ sino

1 голос
/ 30 января 2012

Это потому, что вы указали неверные параметры маршрута.

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

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

 return RedirectToAction("WriteInTemplate", statementList );

вместо этого следует использовать

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

см. Ссылку здесь

1 голос
/ 27 января 2012

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

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

...