TempData теряет данные на пустую функцию - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь сохранить List в TempData, который я позже приведу к его типу и передам в представление, но TempData после возврата из контроллера теряет свои данные.

Контроллер A:

public ActionResult Index(int? Page, int? id, int? attId, int? EnrollNumber, int? attend, DateTime? reqDate, DateTime? reqDT, DateTime? reqTime, DateTime? StartDate, string deets = " ",  string preAppr = "", string type = "")
{

//some code

new UserInfoController().reLabelLogs(reqTime.Value.Date, reqTime.Value, id, 0, 0, null, attLogs);
var atLogs = new List<AttendanceLog>();
var temp = TempData["ppList"]; //its empty?
atLogs = (List<AttendanceLog>)TempData["ppList"];
return View(atLogs);
}   

Контроллер UserInfo:

public void reLabelLogs(DateTime? startDate, DateTime? startDateTime, int? empId, int? isPending, int? isManual, DateTime? manualDate
            , List<AttendanceLog> pList)
{

//some code
 if (pList == null)
            {
                  data = db.AttendanceLogs
                    .Where(z => z.EmpID == empId && z.Date >= startDate && z.Date <= today).ToList();
            }
            else
            {
                  noSave = true;
                  data = pList.ToList();
            }
foreach (var log in data)
 {
 // some code
 }
   TempData["ppList"] = data; //there is data but soon after the control goes back to Controller A it becomes null
}

Что я пробовал?

Я пытался использовать:

Session (but it would give NullException at UserInfoController)

ViewBag.ppList (same result as TempData)

Tried TempData.Keep(); and TempData.Peek();  (no help)

enter image description here

Ответы [ 4 ]

0 голосов
/ 17 мая 2018

Чтобы получить доступ к session переменным во вторичном контроллере, вы должны использовать

 System.Web.HttpContext.Current.Session["ppList"] = data;
0 голосов
/ 17 мая 2018

Tempdata ведет себя так, как задумано: подробнее здесь - Использование Tempdata в ASP.NET MVC - Лучшая практика

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

0 голосов
/ 17 мая 2018

TempData и Session не работают, потому что ваш UserInfoController не имеет контекста. Вы можете попробовать передать ему текущий контекст:

var controller = new UserInfoController()
controller.Initialize(new RequestContext(this.HttpContext, this.RouteData));

controller.reLabelLogs(reqTime.Value.Date, reqTime.Value, id, 0, 0, null, attLogs);

Или вы можете использовать сеанс, получив текущий http-контекст:

HttpContext.Current.Session["list"] = data;
0 голосов
/ 17 мая 2018

Ответ прост:

TempData - это словарь временного хранилища, поддерживаемый сессией, который доступен для одного запроса.Замечательно передавать сообщения между контроллерами.

Вы должны использовать что-то другое, например, Session.Нам нужно знать, с какой проблемой вы сталкиваетесь, используя Session (если я понимаю, что вы уже пробовали это решение)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...