在MVC中拥有仅数据控制器的良好实践?

时间:2012-07-10 14:32:34

标签: c# asp.net-mvc model-view-controller asp.net-mvc-2 application-design

我正在使用ASP.NET MVC2并且在各个领域都有各种控制器。

在其中许多中,我需要从数据库中包含的值列表中选择一个值;例如,选择产品或员工。

我目前正在考虑让控制器专门用于获取这些列表以供下拉列表等使用。此控制器只需查询DAL并提供JSON对象,以便在需要它们的任何视图上加载ajax调用

我唯一关心的是我的观点是一次从不同的控制器获取数据。

我是否有理由担心?有没有更好的方法来设置它,可能创建一个Product / Employee类,尤其是创建一个共享的强类型部分视图?

3 个答案:

答案 0 :(得分:1)

创建另一个类,充当控制器和数据访问代码之间的中间层。您现在可以从不同的控制器中调用此类方法。

public class ItemService()
{
 public static List<Items> GetItems()
 {
    var items=yourRepositary.GetItems();
    return items;
 }
}

您现在可以从不同的控制器中调用它

public ActionResult GetItems()
{
  var items=ItemService.GetItems();
  return Json(items,JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:0)

另一种方法是使用实​​现此常用功能的基类控制器,然后从中继承其他具体控制器(与视图配对)。

这种方法可以支持存在大量不同列表的情况,或者需要动态构建列表以响应输入参数。

ActionFilterAttribute方法可能更适合于存在更少,更多静态列表的情况。

答案 2 :(得分:0)

最佳解决方案imho是创建一个自定义ActionFilterAttribute,它使用您需要在视图上呈现的任何数据填充ViewData字典。然后,您可以为ViewDataDictionary创建扩展,以便从视图中以类型安全的方式访问此信息,或者如果ViewData不包含数据(即提示您在控制器方法上方添加操作过滤器属性),则抛出异常。使用继承可能会让你陷入困境。