почему TempData [] не работает с IE - PullRequest
3 голосов
/ 26 октября 2011

В моем проекте MVC3 есть много данных TempD [], которые я использую для передачи данных между действиями.И это прекрасно работает, когда я использую Chrome.Но в IE я не могу получить значения элементов TempData [].если кто-нибудь знает в чем проблема и как я могу ее решить? `

public class SomeController : Controller
{
    public ActionResult SomeAction()
    {
        TempData["id"] = "someData";
        return View();

    }
}


public class AnotherController : Controller
{
    public ActionResult AnotherAction()
    {
        string data = Convert.ToString(TempData["id"]);
        return View();

    }
}

`

Ответы [ 2 ]

4 голосов
/ 26 октября 2011

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

public class SomeController : Controller
{
    public ActionResult SomeAction()
    {
        TempData["id"] = "someData";
        return Redirect("AnotherAction", "Another");
    }
}


public class AnotherController : Controller
{
    public ActionResult AnotherAction()
    {
        string data = Convert.ToString(TempData["id"]);
        return View();
    }
}

Причина этого в том, что TempData сохраняется только для одного дополнительного запроса.Например, если внутри представления вы отправляете запрос AJAX для какого-либо действия контроллера (независимо от того, какой именно), а затем в этом представлении есть ссылка, указывающая на целевое действие, когда пользователь перенаправляется на это целевое действие, TempData больше не будеттак как он был потерян во время ранее выполненного запроса AJAX.

Если вам нужно хранить данные дольше, чем одно перенаправление, вы можете использовать Session.

0 голосов
/ 13 декабря 2016

Если вам нужно хранить данные дольше, чем одно перенаправление, вы должны использовать методы Keep или Peek.

string data = TempData["id"].;
TempData.Keep("id");

или просто используйте,

string data = TempData.Peek("id").ToString();

Функция Peek помогает читать, а также советует MVC поддерживать «TempData» для последующего запроса.

...