ASP.NET MVC: переназначить TempData - PullRequest
2 голосов
/ 09 сентября 2011

В действии контроллера я получаю переменную из перенаправления в переменную TempData

public ActionResult ChangePassword()
{
    string t = (string)TempData["myVariable"]; // works ok when coming from the redirect
    [..]
}

Поскольку мне нужно сохранить эту привязку для другого вызова, я пытаюсь переназначить ее перед возвратом представления.

public ActionResult ChangePassword()
{
    string t = (string)TempData["myVariable"];
    [..]

    TempData["myVariable"] = TempData["myVariable"];
    return View();
}

Я немедленно отправляю запрос POST с отображаемой страницы обратно в ChangePassword, но на этот раз TempData ["myVariable"] является нулевым. Может быть, я делаю что-то глупое, но как получить желаемый результат? Я не хочу использовать переменную Session (она сохранится гораздо дольше, и я буду работать над тем, чтобы вручную очистить переменную, чтобы предотвратить загрязнение переменных Session). Я мог бы отправить его через форму (скрытая переменная), но я бы предпочел, чтобы переменная оставалась только на стороне сервера.

Ответы [ 3 ]

4 голосов
/ 09 сентября 2011

Я думаю, что вы ищете TempData.Keep()

0 голосов
/ 09 сентября 2011

Если myVariable не является критически важной информационной безопасностью, вы можете перенести его в скрытое поле (изменить представление) и опубликовать его для запроса следующего действия.

0 голосов
/ 09 сентября 2011

TempData сохраняется только в контексте текущего запроса. Если вы возвращаете контент клиенту, а затем клиент отправляет обратно, вы не можете его использовать. Ваши варианты довольно стандартны, и в основном только как вы описали:

  • Используйте переменную формы (как вы сказали - и я предполагаю, что если это поле для смены пароля, то оно может быть чувствительным)
  • Используйте переменную сеанса (как вы уже указали!)
  • Сохранить переменную в другом месте вашего приложения - настраиваемое поле базы данных или профиль пользователя или аналогичный

Лично я бы пошел с поставщиком сеанса или старался не возвращать контент клиенту с немедленной публикацией вообще, если это возможно ...

...