나는 2 컨트롤러가 "시스템 : OpsLinkController에서메소드 호출시 다른 컨트롤러의 세션을 포함 할 수 있습니까?
내가 OpsController의 방법으로 호출 할 OpsController 대 OpsLinkController을 나는 그것이 예외를 발생
public int Test()
{
Session["A"] = 1;
// Do som thing here
return (int)Session["A"];
}
방법이 OpsController에
public ActionResult Index()
{
//
OpsController c = new OpsController();
int i = c.Test();
return View();
}
.NullReferenceException : '개체 참조가 개체의 인스턴스로 설정되지 않았습니다.' "
하지만 우리가 보기 색인에서 아약스로 호출 할 수 있습니다, 그것은 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 왜 우리가 아약스에 의해 방법의 테스트를 excute에 수 있지만, OpsLinkController에서 excute에 수없는 이유는 무엇입니까?
OpsLinkController에서 Test 메서드에 액세스하려면 어떻게해야합니까?
첫 번째 컨트롤러에서 다른 컨트롤러로 전환하려면 리디렉션을 사용하십시오. 'OpsController' 액션 메소드 (예 :'Index')에'Test' 메소드 실행을 놓고 리디렉션하기 위해'OpsLinkController.Index()'에서 RedirectToAction ("Index", "Ops")를 사용하십시오. –
컨트롤러가 다른 컨트롤러를 새로 시작하는 이유는 무엇입니까? 확실히 좋은 습관은 아닙니다. 여러 컨트롤러에 공통적 인 기능을 가지고 있다면 각 컨트롤러에 주입되는 서비스에 있어야하며 런타임 데이터 (세션 상태 매개 변수)는 메서드 매개 변수로 서비스에 전달되어야합니다. 현재 작업 메서드 외부의 세션 상태를 참조 할 필요가 없습니다. – NightOwl888
감사합니다. 내 컨트롤러를 편집합니다. –