Захватить набор данных сеанса, вызвав программный код через Ajax

Строю SMS-систему. У меня есть контакты, и я хочу, чтобы пользователь мог выбрать несколько контактов и отправить им сообщение.

Я хочу временно сохранить выбранные пользователем контакты, чтобы, когда пользователь нажимает кнопку «ОТПРАВИТЬ», я мог обработать этот список.

Я использую C # MVC4 с вызовами Ajax для кода позади метода для создания переменной TempData или Session. Проблема в том, что после установки переменных TempData и Session я хочу отобразить эти данные на экране, но и TempData, и переменная сеанса пусты. В качестве теста я просто сохраняю «ОК» в переменной теста сеанса. Если у вас есть идея получше, которая послужит той же цели, она тоже будет отличной.

Спасибо

//Javascript function residing on the View
function addToSendList(id) {
    $.ajax({
        type: "POST",
        url: "AddToSendList",
        contentType: "application/json;chartset=utf-8",
        dataType: "json",
        data: "{'id':'" + id + "'}",
        success: function (data) {
            alert(@Session["test"]);
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });
}

//Method on Controller that is called
public JsonResult AddToSendList(string id)
{
    int cid = int.Parse(id);
    List<Contact> contacts = (from c in db.Contacts
        where c.Id==int.Parse(id)
        select c).ToList();

    Session["test"] = "ok";
    return Json(contacts, JsonRequestBehavior.AllowGet);
}

ИЗМЕНИТЬ, извините, я совершил ошибку, я отправляю контакт для добавления в список с помощью ajax. Вот где у меня проблема. Как мне поддерживать этот список, выбранный пользователем?


person Hassan Shifaz    schedule 02.10.2014    source источник


Ответы (1)


Это не сработает, потому что вы пытаетесь выполнить код на стороне сервера внутри javascript. Часть на стороне сервера будет выполняться только при первоначальной визуализации страницы и не будет иметь обновленного значения в обратном вызове ajax.

Таким образом вы можете сохранить значение в сеансе, но не можете получить к нему доступ в JavaScript.

Вместо этого вы можете рассмотреть возможность передачи его обратно с ответом json от контроллера - вместо истинного флага.

return Json(Session["test"]);

success: function (data) {
                alert(data);
            }
person TGH    schedule 02.10.2014
comment
Спасибо за ответ на TGH, я не могу отправить сеанс cox, мне нужно вернуть контакт обратно в представление. Только если я могу вернуть оба, но я не думаю, что это разрешено. - person Hassan Shifaz; 02.10.2014
comment
Вы можете отправить обратно любой объект, поэтому вы можете просто включить в этот объект любую информацию, которую хотите. Просто создайте собственный класс, содержащий данные, которые вы хотите отправить обратно. - person TGH; 03.10.2014
comment
Да, я могу создать анонимный объект. Потрясающий. Спасибо TGH - person Hassan Shifaz; 03.10.2014