Свойства, которые являются живыми на запросе одной страницы - PullRequest
0 голосов
/ 03 декабря 2009

У меня есть страница ASP.NET MVC, и на этой странице я сделаю несколько вызовов AJAX.

Что это за свойство внутри Controller, значения которого сохраняются до тех пор, пока страница остается там (даже во время вызова AJAX), и уничтожаются, когда я переключаюсь на запрос другой страницы?

Controller.Session ключи и значения, как мы все это знаем, живы и доступны постоянно. Controller.Request живы при создании страницы или при выполнении вызова AJAX. Request переменные не сохраняются от обычного вызова страницы до последующего вызова AJAX на той же странице.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 03 декабря 2009

AJAX-запросы - это полностью отдельные HTTP-запросы, которые отправляются на ваш сервер, учитывая это, вот краткий обзор различных коллекций серверов:

HttpContext.Current.Application: коллекция кэша на уровне приложения одинакова для каждого веб-запроса, независимо от того, откуда поступил этот веб-запрос

HttpContext.Current.Cache: коллекция кэша одинакова для каждого веб-запроса, независимо от того, откуда поступил этот веб-запрос

HttpContext.Current.Request: Коллекция запросов, содержит параметры строки запроса, опубликованные значения и отправленные файлы cookie. Это будет отличаться для каждого HTTP-запроса, поэтому будет отличаться между исходным запросом и последующими AJAX-запросами.

HttpContext.Current.Items: сбор для хранения данных между компонентами, используемыми в одном веб-запросе, и, следовательно, отбрасывается после завершения запроса и сбрасывается между исходным запросом и запросами AJAX

HttpContext.Current.Session: привязано к определенному сеансу браузера (с использованием файлов cookie по умолчанию), поэтому одинаково для каждого отдельного пользователя, который обращается к вашему серверу. Это ваш единственный верный вариант того, чего вы хотите достичь

1 голос
/ 03 декабря 2009

сохраняется до тех пор, пока страница все еще там

Страница никогда не бывает действительно "там". В ASP.NET MVC вообще отсутствует понятие страниц. Страницы в смысле объектов интерфейса с продолжительностью жизни, растянутой на несколько запросов, с возможностью сохранения некоторых данных и состояния элементов управления. Существуют представления, которые существуют только на один момент без возможности сохранения каких-либо данных.

Есть запросы. Вы запросили страницу, у вас есть. Сервер вернул его вам и сразу забыл об этом. Ваш Ajax-вызов - совершенно новый запрос. Сервер даже не узнает, является ли это Ajax-запросом. Для этого все запросы равны, Get, Post или иначе.

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

Другой альтернативой является коллекция Session. Он будет хранить данные между многими запросами вашего сеанса.

0 голосов
/ 03 декабря 2009

Значения, которые вы найдете в свойстве Request, выбираются либо из URL, либо из тела POST, поэтому, если они отсутствуют при выполнении вызова AJAX, даже если они присутствовали при запросе исходной страницы, они будут больше не будет доступен Единственное свойство, которое доступно для разных запросов - это Session и TempData (которое использует сеанс для сохранения значений между двумя запросами).

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