通过Ajax调用代码隐藏来捕获会话数据集

时间:2014-10-02 04:29:11

标签: jquery asp.net-mvc session tempdata

我正在建立一个短信系统。我有联系人,希望允许用户选择多个联系人并向他们发送消息。

我想暂时维护用户选择的联系人,以便当用户点击SEND按钮时我可以处理该列表。

我正在使用C#MVC4和Ajax调用代码隐藏方法来创建TempData或Session变量。问题是,在设置TempData和Session变量之后我想在屏幕上显示这些数据,但TempData和Session Variable都是空的。作为测试,我只是在Session Test Variable中保存“ok”。如果你有一个更好的想法,它将起到同样的作用,它也会受到影响。

感谢名单

//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列表。这就是我遇到问题的地方。如何维护该用户选择的列表?

1 个答案:

答案 0 :(得分:0)

这不起作用,因为您正在尝试在javascript中执行服务器端代码。服务器端部分仅在最初呈现页面时执行,并且在ajax回调中不具有更新的值。

您可以通过这种方式将值保存到会话中,但是您无法在JavaScript中像这样访问它。

您可以考虑使用来自控制器的json响应来传回它 - 而不是真正的标志。

return Json(Session["test"]);

success: function (data) {
                alert(data);
            }