JQuery Post到MVC方法的会话变量消失了

时间:2010-01-08 09:34:32

标签: jquery asp.net-mvc session post

我正在使用Jquery编写一个ASP.Net MVC应用程序,将一些数据发布到我的用户会话中。

用户1st访问我网站的页面,然后我有一个按钮,使用JQuery执行帖子到MVC控制器方法将一些数据存储到用户会话中。

当初始页面加载时,我使用会话工厂为我的用户创建一个会话对象。这很好用。作为对我的页面的初始请求的一部分,我将一个名为JoinState的对象放入我的会话中 - 这必须适用于任何后续请求。

当用户单击页面上的按钮时,将执行JQuery帖子以将数据添加到JoinState对象。这将发布到MVC控制器方法,该方法访问已定义的会话并使用发布的数据更新JoinState对象。

但是,当帖子发生时,我的应用程序无法识别创建的初始会话。这导致“对象未设置为实例....”(基本上是空引用异常),因为现在已经定义的JoinState对象不存在。

我无法弄清楚为什么会这样。到目前为止我所做的工作如下:

  • 它仅影响从我的网络外部访问该网站的用户。
  • 我网络中的用户不受影响。
  • 网址名称是动态DNS名称 - 这会影响.net如何查看会话吗?
  • 我使用了firebug来调试POST请求,并且可以确认正在发送ASP.Net会话cookie。

出于某种原因,在我的JQuery帖子中,我的原始会话无法识别。

提前致谢。

3 个答案:

答案 0 :(得分:0)

我不确定这一点,但我认为jQuery帖子就像调用Web服务一样,因此不会引用你的对象。

您需要传回会话密钥或其他内容,以便加载它然后添加到其中。

所有这些都是我的头脑,完全没有经过测试。

如果我错了,请告诉我,我会做一些测试,也许会删除这个答案,以免混淆问题。

答案 1 :(得分:0)

如果网址名称是动态的,则当网址名称发生更改时,ASP.Net发出的会话cookie将无效,因此您将丢失与现有会话的连接。 您可以将网站配置为无cookie会话,但您必须检查是否需要手动附加会话密钥查询字符串变量。

答案 2 :(得分:0)

嗯,,,,,,问题现在解决了。

  • 与MVC无关。
  • 与JQuery无关
  • 与我有关的一切都没有完全理解asp.net中的会话状态。

...事实

  • 在本地Web Dev服务器上工作。
  • 应用程序已移至IIS,但已停止工作。

...发现

  • 正在使用InProc会话。
  • 在IIS中设置了1以上的工作进程。

每次发生请求时,都会遇到新的工作进程。因为会话存储在InProc中,或者存储在每个单独进程的内存中,所以每次请求获得新WP时都会有一个新会话。

最后的结论......

  • 不要乱用你不理解的IIS设置!!!

工作流程现在重新设置为1 - 应用程序正在运行。

睡觉的时间 - 感谢所有回复的人。