如何从其他控制器调用包含会话的方法?
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.'"
我有 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.'"