ASP.NET MVC сеанс потерян между загрузками страниц - PullRequest
1 голос
/ 07 марта 2011

Я пытаюсь использовать состояние сеанса в MVC, и я застрял на весь вечер! Я понимаю, что состояние сеанса должно использоваться в MVC экономно, но я уверен, что хочу использовать его для этой одной страницы, поэтому буду признателен за решения, а не за мнения.

По сути, у меня есть контактная форма с изображением CAPTCHA. Когда страница загружается, я хочу установить в сеансе символы, используемые в изображении CAPTCH (динамически генерируемое изображение). У меня есть ссылка «новое изображение», которая асинхронно создает новый код, устанавливает сеанс и динамически загружает новое изображение на экран.

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

Если я выполняю перезагрузку AJAX на образе, т.е. устанавливаю сеанс асинхронно - сеанс устанавливается, когда я выполняю сообщение !!

Что происходит?

Мне нужно сохранить значение сеанса - arrrhhhh!

У меня это базовый контроллер:

public new HttpContextBase HttpContext
{
   get
   {
      HttpContextWrapper context = new HttpContextWrapper(System.Web.HttpContext.Current);
      return (HttpContextBase)context;
   }
 } 

а в контроллере у меня есть:

  [AcceptVerbs(HttpVerbs.Post)]
  public ActionResult Contact(ContactForm c, string button)
  {
    string sessCaptcha = HttpContext.Session["CAPTCHA_Contact"] == null ? "" : HttpContext.Session["CAPTCHA_Contact"].ToString();
  }

Есть идеи ????? довольно пожалуйста с вишней на вершине:)

Спасибо!

Ответы [ 2 ]

4 голосов
/ 07 марта 2011

Я сейчас так смущен ...

Никогда не устанавливал значение сеанса перед Response.End () (и я считаю, что то же самое относится и к response.redirect).

OMG - это 4 часа, которые я никогда больше не вернусь!

Вот демонстрационный код, иллюстрирующий мою неумелость ...

   public ActionResult Page1()
        {
            Session["test1"] = "hello world";

            // This means the session won't be set
            // It's is used in valid circumstances..e.g. setting session, then dynamically generating an image based on that value.
            Response.End();

            return View();
        }

        public ActionResult Page2()
        {
            ViewBag.Test = Session["test1"].ToString();

            return View();
        }

        [HttpPost]
        public ActionResult Page2(FormCollection fc)
        {
            ViewBag.Test = "...is still..." + Session["test1"].ToString();

            return View();
        }
0 голосов
/ 07 марта 2011

Возможно, вы захотите изучить использование объекта TempData

http://blog.donnfelker.com/2010/02/26/aspnet-mvc2-tempdata-now-persists/

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