2011-12-30 59 views
0

在我的MVC3解決方案中,我想知道如何移動將Json從控制器中退出並返回到服務層的邏輯。說我已經得到的Json需要在我的控制器下面的行動以便對jQueryUI的自動完成控制:JsonResult in services 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); 
} 

我怎麼會移動到這個服務層?我不想在我的服務層中引用System.Web.MVC。我也想過退回客戶,但我不知道如何返回匿名類型 - 我是否需要創建一個類?

+1

關於退回客戶 - 您不能返回匿名類型,並且確實需要一個類。 – Oded 2011-12-30 08:11:50

回答

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

我知道Ruby on Rails中的特徵,在那裏,你可以定義你的方法是能夠根據客戶的偏好返回JSON或XML或HTML的,這將是一個很好的功能,如果你可以找到一個圖書館,可以爲你做到這一點。這可能是通過動態代理服務可以實現的一個方面。