programing

서로 다른 컨트롤러 작업 방법 간에 데이터 전달

mailnote 2023. 6. 15. 22:00
반응형

서로 다른 컨트롤러 작업 방법 간에 데이터 전달

는 중용사를 합니다.ASP.NET MVC 4한 컨트롤러에서 다른 컨트롤러로 데이터를 전달하려고 합니다.이해가 안 돼요.이것이 가능한지 잘 모르겠습니다.

다음은 데이터를 전달할 소스 작업 방법입니다.

public class ServerController : Controller
{
     [HttpPost]
     public ActionResult ApplicationPoolsUpdate(ServiceViewModel viewModel)
     {
          XDocument updatedResultsDocument = myService.UpdateApplicationPools();

          // Redirect to ApplicationPool controller and pass
          // updatedResultsDocument to be used in UpdateConfirmation action method
     }
}

이 컨트롤러에서 이 작업 방법으로 전달해야 합니다.

public class ApplicationPoolController : Controller
{
     public ActionResult UpdateConfirmation(XDocument xDocument)
     {
          // Will add implementation code

          return View();
     }
}

는 다는시음니다습에서 .ApplicationPoolsUpdate동작 방법이지만 작동하지 않습니다.

return RedirectToAction("UpdateConfirmation", "ApplicationPool", new { xDocument = updatedResultsDocument });

return RedirectToAction("UpdateConfirmation", new { controller = "ApplicationPool", xDocument = updatedResultsDocument });

어떻게 하면 이를 달성할 수 있을까요?

HTTP 및 리디렉션

먼저 ASP.NET MVC의 작동 방식을 요약해 보겠습니다.

  1. HTTP 요청이 수신되면 경로 집합과 일치합니다.경로가 요청과 일치하면 해당 경로에 해당하는 컨트롤러 작업이 호출됩니다.
  2. 작업 메서드를 호출하기 전에 ASP.NET MVC는 모델 바인딩을 수행합니다.모델 바인딩은 기본적으로 텍스트인 HTTP 요청의 내용을 작업 방법의 강력한 형식의 인수에 매핑하는 프로세스입니다.

또한 리디렉션이 무엇인지 알려줍니다.

은 웹 입니다. HTTP 리디션은렉트에언에로보낼으응라,언가다트른다니지 URL합시요찾록.은 "URL"에되어 있습니다.Location웹 서버가 클라이언트에 반환하는 헤더입니다.ASPASP.NET MVC를 합니다.RedirectResult소송에서

데이터 전달

및 정수와 의 쿼리 매개 할 수 .Location표제의만약 당신이 이런 것을 사용한다면 이런 일이 일어날 것입니다.

return RedirectToAction("ActionName", "Controller", new { arg = updatedResultsDocument });

다른 사람들이 시사하는 바와 같이

이것이 효과가 없을 것이라는 이유는XDocument잠재적으로 매우 복잡한 개체입니다.ASP MVC 에서 ASP.NET MVC로 .XDocument작업 매개 변수.

일반적으로 다음 요청 시 클라이언트가 서버에 문서를 다시 전달하기 위해 클라이언트에 문서를 전달하는 것은 매우 취약한 절차입니다. 모든 종류의 직렬화 및 역직렬화가 필요하고 모든 종류의 작업이 잘못될 수 있습니다.문서가 크면 대역폭이 상당히 낭비될 수 있으며 응용프로그램 성능에 심각한 영향을 미칠 수 있습니다.

대신, 문서를 서버에 보관하고 식별자를 클라이언트에 다시 전달합니다.그런 다음 클라이언트는 다음 요청과 함께 식별자를 전달하고 서버는 이 식별자를 사용하여 문서를 검색합니다.

다음 요청 시 검색할 데이터 저장

이제 문제는 서버가 그 동안 문서를 어디에 저장하느냐는 것입니다.글쎄요, 그건 당신이 결정해야 할 일이고 최선의 선택은 당신의 특정 시나리오에 달려 있습니다.이 문서를 장기적으로 사용할 수 있어야 하는 경우 디스크 또는 데이터베이스에 저장할 수 있습니다.서버의 ASP.NET 캐시에 Session(또는)TempData어느 것이 어느 정도와 같습니까?Session결국)이 올바른 해결책일 수 있습니다.어느 쪽이든 나중에 문서를 검색할 수 있는 키 아래에 문서를 저장합니다.

int documentId = _myDocumentRepository.Save(updatedResultsDocument);

그런 다음 해당 키를 클라이언트에게 반환합니다.

return RedirectToAction("UpdateConfirmation", "ApplicationPoolController ", new { id = documentId });

문서를 검색하려면 키를 기반으로 가져오기만 하면 됩니다.

 public ActionResult UpdateConfirmation(int id)
 {
      XDocument doc = _myDocumentRepository.GetById(id);

      ConfirmationModel model = new ConfirmationModel(doc);

      return View(model);
 }

ASP.NET MVC TempData를 사용해 보셨습니까?

ASP.NET MVC TempData 사전은 컨트롤러 작업 간에 데이터를 공유하는 데 사용됩니다.TempData 값은 읽거나 현재 사용자의 세션이 시간 초과될 때까지 유지됩니다.TempData의 데이터를 유지하는 것은 리디렉션과 같은 시나리오에서 단일 요청 이상의 값이 필요할 때 유용합니다.

코드는 다음과 같습니다.

[HttpPost]
public ActionResult ApplicationPoolsUpdate(ServiceViewModel viewModel)
{
    XDocument updatedResultsDocument = myService.UpdateApplicationPools();
    TempData["doc"] = updatedResultsDocument;
    return RedirectToAction("UpdateConfirmation");
}

Application Pool 컨트롤러에서 다음을 수행합니다.

public ActionResult UpdateConfirmation()
{
    if (TempData["doc"] != null)
    {
        XDocument updatedResultsDocument = (XDocument) TempData["doc"];
            ...
        return View();
    }
}

개인적으로 TempData를 사용하는 것을 좋아하지 않지만 ASP.Net-MVC의 컨트롤러정보 전달에 설명된 대로 강력한 형식의 개체를 전달하는 것을 선호합니다.

당신은 항상 그것을 명시적이고 예상되는 것으로 만드는 방법을 찾아야 합니다.

나는 이것을 대신 사용하는 것을 선호합니다.TempData

public class Home1Controller : Controller 
{
    [HttpPost]
    public ActionResult CheckBox(string date)
    {
        return RedirectToAction("ActionName", "Home2", new { Date =date });
    }
}

또 하나의 의그외controller Action이라

public class Home2Controller : Controller 
{
    [HttpPost]
    Public ActionResult ActionName(string Date)
    {
       // do whatever with Date
       return View();
    }
}

너무 늦었지만 앞으로 누구에게나 도움이 되길 바랍니다.

한 컨트롤러에서 다른 컨트롤러로 데이터를 전달해야 하는 경우 경로 값별로 데이터를 전달해야 합니다.둘 다 다른 요청이기 때문에 한 페이지에서 다른 페이지로 데이터를 전송할 경우 사용자가 문자열(경로 값과 동일)을 쿼리해야 합니다.

하지만 한 가지 묘기를 부릴 수 있습니다.

호출 작업에서 호출된 작업을 간단한 방법으로 호출합니다.

public class ServerController : Controller
{
 [HttpPost]
 public ActionResult ApplicationPoolsUpdate(ServiceViewModel viewModel)
 {
      XDocument updatedResultsDocument = myService.UpdateApplicationPools();
      ApplicationPoolController pool=new ApplicationPoolController(); //make an object of ApplicationPoolController class.

      return pool.UpdateConfirmation(updatedResultsDocument); // call the ActionMethod you want as a simple method and pass the model as an argument.
      // Redirect to ApplicationPool controller and pass
      // updatedResultsDocument to be used in UpdateConfirmation action method
 }
}

언급URL : https://stackoverflow.com/questions/15385442/passing-data-between-different-controller-action-methods

반응형