Asp.net mvc 如何在MVC 3中的操作控制器之间共享会话变量?
我在第一个视图中有一个网格面板。如果单击此视图中的按钮,所选行将显示在另一个视图中。我需要将这些行的信息发送到服务器,以便在单击按钮的操作中加载一些额外的数据。 要执行此操作,我应该使用Session而不是TempData或ViewBag/ViewData,因为我不知道用户何时会单击按钮。如果我弄错了,请纠正我 我的代码是这样的:在使用AJAX的客户端,我调用一个操作方法来设置会话变量:Asp.net mvc 如何在MVC 3中的操作控制器之间共享会话变量?,asp.net-mvc,session,Asp.net Mvc,Session,我在第一个视图中有一个网格面板。如果单击此视图中的按钮,所选行将显示在另一个视图中。我需要将这些行的信息发送到服务器,以便在单击按钮的操作中加载一些额外的数据。 要执行此操作,我应该使用Session而不是TempData或ViewBag/ViewData,因为我不知道用户何时会单击按钮。如果我弄错了,请纠正我 我的代码是这样的:在使用AJAX的客户端,我调用一个操作方法来设置会话变量: Ext.Ajax.request({ url: 'Examples/SetSelectedStations'
Ext.Ajax.request({ url: 'Examples/SetSelectedStations', params: { selectedStations: stationsStr} });
在SetSelectedStations
控制器中,我设置了会话[“selected”]
以便控制器动作如下:
public ViewResult SetSelectedStations(string selectedStations)
{
Session["selected"] = selectedStations;
return View();
}
我想在另一个名为ShowSelectedStations
的控制器中获取Session[“selected”]
:
public Ext.Net.MVC.PartialViewResult ShowSelectedStations(string containerId)
{
string ss = Session["selected"] as string;
// Here ss is null !!!
}
问题是第二个控制器中的会话[“选定”]始终为空!!!
我是否应该在其他位置定义会话[“选定”]?web.confg文件中是否有特殊配置
请注意,my web.config中的sessionState如下所示:
<sessionState mode="Custom" customProvider="PgSessionStateStoreProvider">
<providers>
<clear />
<add name="PgSessionStateStoreProvider" type="NauckIT.PostgreSQLProvider.PgSessionStateStoreProvider" enableExpiredSessionAutoDeletion="true" expiredSessionAutoDeletionInterval="1800000" enableSessionExpireCallback="false" connectionStringName="AspSQLProvider" applicationName="WebSite1" />
</providers>
</sessionState>
它与默认会话状态提供程序一起工作吗?@MXI我没有与默认会话提供程序一起尝试,因为我应该使用PGSessionStateStoreProvider仅用于故障排除目的,您应该尝试它。它将让您了解它是否与自定义提供商相关。很容易恢复,只需注释/取消注释
节点即可。@MXI如果默认提供程序出现某些错误,则可能不是提供程序。设置会话变量时,是否确定selectedStations
不为空?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace WIS_3_0
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Examples", action = "Ex3", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
}