2013-12-10 3 views
1

asp MVC 4 함께 작동합니다. 단일 컨트롤러가 있고 그 자신의 기능간에 동일한 개체를 공유하고 싶습니다. 데이터 멤버에 대해 생각했지만 작동하지 않습니다.동일한 컨트롤러의 기능간에 개체를 공유하는 방법은 무엇입니까?

public class MyController : Controller 
{ 
    public MyObject obj; 

    public ActionResult Index() 
    { 
     obj = new MyObject(); 
     this.obj.GetData();   // Fill my object 
     return View(); 
    } 

    public ActionResult MyFunction() 
    { 
     Console.Write(this.obj);  // Always null 
     return View(); 
    } 
} 

이 가능 기능 사이의 개체를 유지하기 : 여기 내 코드는? 나는 데이터 공유를 위해 TempData ou ViewBags을 만들었지 만 큰 개체를 관리하는 올바른 방법인지는 잘 모르겠습니다.

+0

사용자가 요청할 때마다 다른 액션 컨트롤러에 대한 페이지가 재생성됩니다. 하나의 사용자 호출과 여러 사용자간에 값을 공유하기위한 데이터베이스 또는 캐시간에 변수를 공유하기 위해 세션을 사용할 수 있습니다. – FLCL

답변

2

MVC 프레임 워크가 다른 요청을 처리 할 새 컨트롤러를 만들기 때문에 null이기 때문에 obj도 다릅니다.

개체 싱글 톤을 만들거나 단순히 고정 시키면 작동합니다.

public static MyObject obj; 
+0

고맙습니다. 정적에 대해서는 생각하지 않았습니다. 지금은 분명해 보입니다. :) – Alex

+0

다른 사용자 세션에도 적용됩니까? 이것은 안전한 것처럼 보이지 않습니다. – rhughes

+0

@rhuges : 사용자 세션별로 다르지 않습니다. 우리가 그렇게하고 싶다면 asp.net MVC IoC 프레임 워크를 사용자 세션에 다시 쓸 수 있습니다 :) –

0

이 시도 :

public class MyController : Controller 
{ 
    public MyObject obj = new MyObject(); 

    public ActionResult Index() 
    { 
     this.obj.GetData();   // Fill my object 
     return View(); 
    } 

    public ActionResult MyFunction() 
    { 
     Console.Write(this.obj);  // Always null 
     return View(); 
    } 
} 

이 당신의 null 오류를 중지합니다.

포스트 백간에 데이터를 저장하려면 SQL 기반 데이터베이스와 같은 영구 데이터 저장소를 조사해야합니다.

+0

null 오류가 발생하지만 obj가 비어 있습니다. 정적 데이터 멤버 (cf : @ Hiệp Lê)로이 문제를 해결합니다. – Alex

관련 문제