如何从其他控制器调用包含会话的方法?

How can call a method contain session from Other Controller?

我有 2 个控制器:OpsLinkController 与 OpsController

在 OpsLinkController 中,我想调用 OpsController 中的方法

public ActionResult Index()
        {
            //
            OpsController c = new OpsController();
            int i = c.Test();
            return View();
        }

在 OpsController 中我有方法

public int Test()
        {
            Session["A"] = 1;
            // Do som thing here
            return (int)Session["A"];
        }

它抛出异常:"System.NullReferenceException: 'Object reference not set to an instance of an object.'"

但是当我们可以通过 ajax 从视图索引中调用时,就可以了:

$.ajax({
                contentType: "application/json; charset=utf-8",
                dataType: "json",
               // type: "POST",
                url: "/Ops/Test",
                data: {},
                success: function (data) {
                    console.log(data);
                },
                err: function (response) {
                    console.log(response);
                }
            });

结果:1 为什么我们可以通过ajax执行方法Test,而不能从OpsLinkController执行?

我们如何从 OpsLinkController 访问方法 Test?

回答问题:如何从 OpsLinkController 访问方法 Test?

您不能从 OpsLinkController 调用测试,因为在这种情况下 OpsController 的会话不存在。

1 在页面启动时创建Session,在OpsLinkController中构造OpsController时

OpsController c = new OpsController();
            int i = c.Test(); 

会话尚未创建是。

回答问题:为什么我们可以通过ajax执行方法Test?

在ajax中,您已经调用了 OpsController,这意味着将创建一个 OpsController 会话。

url: "/Ops/Test", 

=> 好的,

但是如果你的url是这样的:

url: "/OpsLink /Test",

会抛出错误"System.NullReferenceException: 'Object reference not set to an instance of an object.'"