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

时间:2017-10-13 02:27:08

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-3

我有2个Controller:OpsLinkController vs 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:'对象引用未设置为对象的实例。'"

但是当我们可以通过View Index中的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执行方法测试,但不能从OpsLinkController执行?

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

1 个答案:

答案 0 :(得分:1)

回答问题:我们如何从OpsLinkController访问方法测试?

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

1在页面启动时创建的会话,在OpsLinkController中构建OpsController时

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

会话未创建是。

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

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

url: "/Ops/Test", 

=>好的,

但如果你的网址是这样的:

url: "/OpsLink /Test",

错误将抛出“System.NullReferenceException:'对象引用未设置为对象的实例。'”