我有2个控制器: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"];
}
它抛出一个异常:“系统.NullReferenceException:'对象引用未设置为对象的实例'。“
但是当我们可以通过AJAX从View指数看涨,就OK了:
$.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 EXCUTE法测试,但不能从OpsLinkController EXCUTE?
我们如何从OpsLinkController访问方法测试?
使用重定向从第一个控制器切换到另一个。在'OpsControlControl'.Index()'返回视图并使用'RedirectToAction(“Index”,“Ops”)''重定向之前,将'Test'方法执行放在'OpsController'操作方法(例如'Index') –
为什么你的控制器新增了另一个控制器?这当然不是一个好的做法。如果您拥有多个控制器通用的功能,则它应该位于注入每个控制器的服务中,并且运行时数据(会话状态参数)应作为方法参数传递给服务。您应该永远不需要在当前操作方法之外引用会话状态。 – NightOwl888
谢谢,我会编辑我的控制器 –