2011-12-30 3 views
0

내 MVC3 솔루션에서 Json을 컨트롤러 밖으로 서비스 계층으로 반환하는 논리를 이동하는 방법을 궁금합니다.JsonResult in service layer

public JsonResult ClientAutocompleteJSON(string term) 
{ 
    NorthwindEntities db = new NorthwindEntities(); 
    var customers = db.Customers 
       .Where(c => c.ContactName.Contains(term)) 
       .Take(25) 
       .Select(c => new 
       { 
        id = c.CustomerID, 
        label = c.ContactName, 
        value = c.ContactName 
       }); 

    return Json(customers, JsonRequestBehavior.AllowGet); 
} 

가 어떻게 서비스 계층에이 이동할 것이다 : 나는 내 컨트롤러에 다음과 같은 조치가 JSON은 JQueryUI 자동 완성 제어에 필요한하세요이 있다고? 내 서비스 계층에서 System.Web.MVC를 참조하지 않는 것이 좋습니다. 나는 또한 고객을 돌려 주겠다고 생각했으나 익명 유형을 반환하는 방법을 모르겠습니다. 클래스를 만들어야합니까?

+1

고객을 돌려주는 것과 관련하여 익명의 유형을 반환 할 수 없으며 수업이 실제로 필요합니다. – Oded

답변

2

서비스 구현을 특정 (UI) 형식으로 연결하지 않겠습니다. 강력하게 형식화 된 고객 객체를 반환 한 다음 Action 메소드에서 원하는 방식으로 형식을 지정하는 것이 좋습니다.

// Service method 

public IEnumerable<Customer> FindCustomers(string term) { 
    NorthwindEntities db = new NorthwindEntities(); 
    return db.Customers 
       .Where(c => c.ContactName.Contains(term)) 
       .Take(25) 
       .ToList(); 
} 

// Action method 

public JsonResult ClientAutocompleteJSON(string term) { 

    var customers = customerService.FindCustomers(term) 
         .Select(c => new 
         { 
          id = c.CustomerID, 
          label = c.ContactName, 
          value = c.ContactName 
         }); 

    return Json(customers, JsonRequestBehavior.AllowGet); 
} 

이 코드는 훨씬 더 재사용이 가능합니다. 예를 들어 동일한 서비스 메소드를 사용하여 간단한 HTML 검색 양식을 제공 할 수 있습니다.

0

내가 레일에 루비의 기능에 대해 알고를, 거기에 당신의 방법은 고객의 선호도에 따라 JSON 또는 XML이나 HTML을 반환 할 수 있는지 정의 할 수 있습니다, 그것은 좋은 것입니다 만약 당신이 당신을 위해 이것을 할 수있는 라이브러리를 찾을 수 있습니다. 그것은 당신의 서비스가 동적으로 proxifying함으로써 할 수있는 측면이 될 수 있습니다.