我在AnyCPU网络应用程序中使用VS2010,带有Razor的MVC 4,JQuery 1.8 / JQueryUI 1.10.3和AJAX。我看到了奇怪的行为,JQueryUI datepicker的初始化在我控制之外的3-4个独立线程上运行。我发现这是因为应用程序在主布局中访问HttpContext.Current.Session,并且看起来每个'datepicker init threads'都引用或加载主布局,并且在其中一个线程上它抛出一个对象引用异常。
在Fiddler / Dev Tools上检查此请求并不会显示多个请求,尽管线程看起来有多个请求,因为主布局中呈现的部分是调用HttpContext.Current.Session的部分。
请注意,只有我使用datepicker控件的视图才有这种方式,所有其他视图都有一个线程,并且可以毫无问题地访问Session对象。
我使用各种渲染的部分嵌套布局视图,并包含捆绑/缩小的Jquery文件。
------------------
| master layout (only ref'd by secondary layout)
|
| - bundled/min Jquery/JqueryUI js references
| - rendered partial view that accesses HttpContext.Current.Session
|
| ------------------
| | secondary layout (only ref'd by View)
| |
| | - Jquery with datepicker control init function (outside of document.ready)
| |
| | ------------------
| | | View
| | |
| | | - Jquery inside document.ready that calls datepicker control init function (included in secondary layout) based on values in this view's model
| |
|
我尝试过以上的变体,包括将所有标记,js refs等放到一个页面上,它仍然表现相同。如果需要的话,我可以发布实际的代码,但是当我处于绑定状态时,我希望将其发布到那里。