【发布时间】:2018-03-25 02:21:36
【问题描述】:
我有 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.'”
但是当我们可以从 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可以执行Test方法,OpsLinkController不能执行?
我们如何从 OpsLinkController 访问方法 Test?
【问题讨论】:
-
使用重定向从第一个控制器切换到另一个。在返回视图之前将
Test方法执行放在OpsController操作方法(例如Index)上并使用OpsLinkController.Index()中的RedirectToAction("Index", "Ops")进行重定向。 -
为什么你的控制器要更新另一个控制器?这当然不是一个好习惯。如果您有多个控制器共有的功能,它可能应该在注入每个控制器的服务中,并且运行时数据(会话状态参数)应该作为方法参数传递给服务。您永远不需要在当前操作方法之外引用会话状态。
-
谢谢,我会编辑我的控制器
标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-3