2

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

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

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

我唯一担心的是我的视图将同时从不同的控制器获取数据。

我有理由担心吗?有没有更好的方法来设置它,也许创建一个Product/Employee类,特别是从创建一个共享的强类型部分视图?

4

3 回答 3

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);
}
于 2012-07-10T14:37:26.040 回答
0

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

于 2012-07-10T14:52:36.893 回答
0

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

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

ActionFilterAttribute 方法可能更适合静态列表更少、更多的情况。

于 2012-07-10T14:47:51.160 回答