2017-01-18 4 views
0

Сессия [«SelectedRecords»] используется для хранения идентификаторов выбранных записей, например.Обновление сеанса во время запроса ajax, затем доступ к сеансу в представлении

SelectedRecords: 1108392 1108393 1108394 

Когда я сгореть АЯКС пост, который удаляет идентификатор из сессии [ «SelectedRecords»], который, насколько на стороне сервера обеспокоен успешно удаляет идентификатор из сессии [ «SelectedRecords»] ...

List<int> ids = SessionHelper.GetSelectedRecordIds(); 

ids.Remove(selectedItemModel.Id); 

string csv = string.Join<int>(",", ids); 

this.Session["SelectedRecords"] = csv; 

используя событие onSuccess/onRequestEnd Затем я использую console.log для вывода Session ["SelectedRecords"] для проверки.

function onRequestEnd(e) { 
    console.log('onRequestEnd SelectedRecords: ' + @Session["SelectedRecords"]); 
} 

Но console.log показывает, что сессия [ «SelectedRecords»] (насколько клиент обеспокоен еще содержит удаленный идентификатор ?!)

Таким образом, вопрос, когда я удалить значение из Сессия [«SelectedRecords»] через пост ajax и последующий доступ к сеансу [«SelectedRecords»] в представлении, представление сообщает «старые» значения, то есть не последние значения ?!

ответ

1

Как правило, если у вас есть один объект в сеансе, и вы POST удаляете, вы также должны удалить его из сеанса. Это делается, как показано ниже:

Session.Remove("key"); 

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

Однако, в вашем случае это не сработает. Вы должны сделать две вещи:

  • Удалить выбранные записи из сеанса.
  • Добавить новые SelectedRecords (без одной записи, которую вы удалили с помощью POST) на сеанс.

После этого (что после вашего обновления кажется, что у вас уже есть эта логика в коде), вы должны вернуть клиенту новые SelectedRecords и заменить старое значение новым.

Что-то вроде этого:

$("#selectedRecords").val(newSelectedRecords) 

выше должна быть выполнена в успех обратного вызова вашего вызова AJAX.

+0

Действительно, я удаляю его из сеанса (на сервере ajax post), а затем добавляю их на сеанс в соответствии с моим приведенным выше кодом. –

+0

Извините за «биткие» обновления ... см. Сейчас ... Я делаю это с помощью onRequestEnd и ранее пробовал OnDataBound ... см. Функцию OnRequestEnd, которую я только что добавил. –