【问题标题】:JsonResult in services layer服务层中的 JsonResult
【发布时间】:2012-01-30 10:29:37
【问题描述】:

在我的 MVC3 解决方案中,我想知道如何将返回 Json 的逻辑移出控制器并进入服务层。假设我在控制器中有以下操作来获取 JQueryUI 自动完成控件所需的 Json:

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。我也想过返回客户,但我不确定如何返回匿名类型 - 我必须创建一个类吗?

【问题讨论】:

  • 关于返回客户 - 您不能返回匿名类型,并且确实需要一个类。

标签: asp.net asp.net-mvc-3 c#-4.0


【解决方案1】:

我不会将您的服务实现与特定 (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 搜索表单。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      我知道 Ruby on Rails 中的一个功能,您可以在其中定义您的方法能够根据客户端偏好返回 JSON 或 XML 或 HTML,如果您能找到一个可以执行此操作的库,这将是一个很好的功能为你。这可能是通过动态代理您的服务可以做到的一个方面。

      【讨论】:

        猜你喜欢
        • 2013-04-07
        • 2012-05-11
        • 2014-02-05
        • 2017-06-07
        • 2013-05-16
        • 2014-02-13
        • 2019-05-06
        • 2012-08-25
        • 2012-05-28
        相关资源
        最近更新 更多