컨트롤러 A에서 컨트롤러 B 조치 FileUploadMsgView를 호출하고 이에 대한 매개 변수를 전달해야합니다.
Code---its not going to the controller B's FileUploadMsgView().
In ControllerA
private void Test()
{
try
{//some codes here
ViewBag.FileUploadMsg = "File uploaded successfully.";
ViewBag.FileUploadFlag = "2";
RedirectToAction("B", "FileUploadMsgView", new { FileUploadMsg = "File uploaded successfully" });
}
In ControllerB receiving part
public ActionResult FileUploadMsgView(string FileUploadMsg)
{
return View();
}
답변
컨트롤러는 클래스 일뿐입니다. 새로운 클래스이며 다른 클래스 멤버와 마찬가지로 액션 메서드를 호출하십시오.
var result = new ControllerB().FileUploadMsgView("some string");
답변
@mxmissile이 허용 된 답변에 대한 의견에서 말했듯이 컨트롤러는 IoC에 대해 설정된 종속성이 누락되어 있고을 갖지 않기 때문에 컨트롤러를 새로 시작해서는 안됩니다 HttpContext
.
대신 다음과 같이 컨트롤러 인스턴스를 가져와야합니다.
var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, controller);
답변
샘플은 유사 코드처럼 보입니다. 다음 의 결과 를 반환 해야합니다 RedirectToAction
.
return RedirectToAction("B",
"FileUploadMsgView",
new { FileUploadMsg = "File uploaded successfully" });
답변
@DLeh는 오히려 사용이라고 말합니다.
var controller = DependencyResolver.Current.GetService<ControllerB>();
그러나 컨트롤러에 컨트롤러를 제공하는 것은 특히 User
개체, Server
개체 또는 HttpContext
‘자식’컨트롤러 내부 에 액세스해야 할 때 중요 합니다 .
코드 줄을 추가했습니다.
controller.ControllerContext = new ControllerContext(Request.RequestContext, controller);
그렇지 않으면 System.Web을 사용하여 현재 컨텍스트에 액세스 Server
하거나 초기 객체에 액세스 할 수 있습니다
NB : 프레임 워크 버전 4.6 (Mvc5)을 타겟팅하고 있습니다.
답변
리졸버가 자동으로 그렇게하십시오.
내부 A 컨트롤러 :
public class AController : ApiController
{
private readonly BController _bController;
public AController(
BController bController)
{
_bController = bController;
}
public httpMethod{
var result = _bController.OtherMethodBController(parameters);
....
}
}
답변
누구나 .net 코어 에서이 작업을 수행하는 방법을 찾고 있다면 시작시 컨트롤러를 추가하여 달성했습니다.
services.AddTransient<MyControllerIwantToInject>();
그런 다음 다른 컨트롤러에 주입
public class controllerBeingInjectedInto : ControllerBase
{
private readonly MyControllerIwantToInject _myControllerIwantToInject
public controllerBeingInjectedInto(MyControllerIwantToInject myControllerIwantToInject)
{
_myControllerIwantToInject = myControllerIwantToInject;
}
그럼 그냥 그렇게 불러 _myControllerIwantToInject.MyMethodINeed();
답변
이것은 RedirectToAction()
복잡한 클래스 객체를 전달하지 않는 것을 찾은 후에 정확히 찾고있는 것입니다.
예를 들어, 컨트롤러 에서 IndexComparison
메소드 를 호출하고 LifeCycleEffectsResults
model이라는 복잡한 클래스 객체를 전달 하고 싶습니다 .
실패한 코드는 다음과 같습니다.
return RedirectToAction("IndexComparison", "LifeCycleEffectsResults", model);
주목할만한 점은 문자열, 정수 등 이이 컨트롤러 방법으로의 여행에서 살아남 았지만 일반 목록 객체는 C 메모리 누수를 연상시키는 것으로 고통 받고 있다는 것입니다.
위에서 권장 한대로 다음 코드로 교체했습니다.
var controller = DependencyResolver.Current.GetService<LifeCycleEffectsResultsController>();
var result = controller.IndexComparison(model);
return result;
모든 것이 지금 의도 한대로 작동하고 있습니다. 길을 이끌어 주셔서 감사합니다.