2013-03-05 4 views
1

제 3 자 목록에서 개체를 가져 오는 중입니다. 따라서 생성자를 설정할 수 없습니다. 두 개의 ActionResult 객체가 제 3 자 객체를 가져오고, 다른 하나는 jquery 자동 완성에 사용됩니다.컨트롤러에서 데이터가 null이되지 않도록 유지해야합니다.

나는 목록을 설정하고 다음 ActionResult에 널 않을에서 그것을 유지하는 방법 ... 각 HTTP 요청에 대한

public class MyController : Controller 
{ 
    public List<T> myList; 

    public ActionResult CallToGetThirdPartList(ThirdPartyObject obj) 
    { 
    list = obj.SpecialList; 
    return View(obj); //important 
    } 
    public ActionResult Search(ThirdPartyObject obj) //gets called from jquery 
    { 
    var results = from m in myListist //this is null 
        where m.Title.StartsWith(term) 
        select new { label = m.Summary, m.id }; 

      return Json(results, JsonRequestBehavior.AllowGet) 
    } 
} 

답변

1

, 컨트롤러의 아주 새로운 인스턴스를 알아낼 수 없습니다 만들어집니다. 즉, 한 요청에서 myList을 초기화하면 myList이 초기화되지 않은 다음 요청에 대해 MyController이라는 새로운 인스턴스가 생성됩니다.

요청간에 데이터를 저장하려면 Session (사용자 별 데이터) 또는 Cache (조회 목록과 같은 사이트 전체 데이터 용)을 사용하십시오.

+0

사용되는 캐시, –

0

코드를 약간 변경해야합니다.

public class MyController : Controller 
{ 
public List<T> myList; 

public ActionResult CallToGetThirdPartList(ThirdPartyObject obj) 
{ 
    list = obj.SpecialList; 
    Session["list"] = list; 
    return View(obj); //important 
} 
public ActionResult Search(ThirdPartyObject obj) //gets called from jquery 
{ 
    var listFromSession = Session["list"] as List<T>; 
    var results = from m in listFromSession //this is null 
       where m.Title.StartsWith(term) 
       select new { label = m.Summary, m.id }; 
     Session["result"]=results ; 
     return Json(results, JsonRequestBehavior.AllowGet) 
} 
} 

도움이되기를 바랍니다.

관련 Parminder

+0

덕분에 좋은 작품! 캐시를 사용하기로 결정했는데 (목록이 사용자별로 변경되지 않으므로)이 예제도 잘 작동합니다! 나는 부분적인 대답을 줄 수 있었으면 좋겠다. –

+0

나는 네가 한 것에 답했다. 고마워, 네가 내 대답을 너의 대답으로하고 싶지 않다면. 나는 그것 없이는 죽지 않을 것이다. – Parminder

관련 문제