在ajax请求期间更新会话,然后在视图中访问会话

时间:2017-01-18 09:28:43

标签: c# asp.net-mvc session kendo-grid asp.net-ajax

Session [“SelectedRecords”]用于包含所选记录的Id,例如

SelectedRecords: 1108392 1108393 1108394

当我触发一个从Session [“SelectedRecords”]中删除id的ajax帖子时,就服务器端而言,成功删除了Session [“SelectedRecords”]中的ID ...

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显示Session [“SelectedRecords”](就客户端而言仍然包含已删除的ID?!)

所以问题是当我通过ajax帖子从Session [“SelectedRecords”]中删除一个值,然后在视图中访问Session [“SelectedRecords”]时,视图报告的是“旧”值,即不是最新的值? !

1 个答案:

答案 0 :(得分:1)

通常,当您在Session中有一个对象并且POST一个删除时,您也必须从Session中删除它。这样做如下:

Session.Remove("key");

其中key是您用于在Session中存储项目的唯一键。

然而,在您的情况下,这将无效。你必须做两件事:

  • 从会话中删除SelectedRecords。
  • 将新的SelectedRecords(没有您使用POST删除的记录)添加到会话。

执行此操作后(在更新之后,您的代码中似乎已经有了这个逻辑),您必须将新的SelectedRecords返回给客户端并将旧值替换为新值。

这样的事情:

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

以上内容应在AJAX调用的成功回调中执行。