Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在MVC 3中的操作控制器之间共享会话变量?_Asp.net Mvc_Session - Fatal编程技术网

Asp.net mvc 如何在MVC 3中的操作控制器之间共享会话变量?

Asp.net mvc 如何在MVC 3中的操作控制器之间共享会话变量?,asp.net-mvc,session,Asp.net Mvc,Session,我在第一个视图中有一个网格面板。如果单击此视图中的按钮,所选行将显示在另一个视图中。我需要将这些行的信息发送到服务器,以便在单击按钮的操作中加载一些额外的数据。 要执行此操作,我应该使用Session而不是TempData或ViewBag/ViewData,因为我不知道用户何时会单击按钮。如果我弄错了,请纠正我 我的代码是这样的:在使用AJAX的客户端,我调用一个操作方法来设置会话变量: Ext.Ajax.request({ url: 'Examples/SetSelectedStations'

我在第一个视图中有一个网格面板。如果单击此视图中的按钮,所选行将显示在另一个视图中。我需要将这些行的信息发送到服务器,以便在单击按钮的操作中加载一些额外的数据。 要执行此操作,我应该使用Session而不是TempData或ViewBag/ViewData,因为我不知道用户何时会单击按钮。如果我弄错了,请纠正我

我的代码是这样的:在使用AJAX的客户端,我调用一个操作方法来设置会话变量:

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);
        }
    }
}