【发布时间】:2013-03-27 16:21:10
【问题描述】:
我有一个输入到 IEnumerable 的详细信息视图。带有一堆下拉列表的视图,可让您将过滤器添加到呈现的记录列表中。
所有这些下拉列表都对应于 MVC 模型上的属性:
public class Record
{
public string CustomerNumber { get; set; }
public string CustomerName { get; set; }
public string LineOfBusiness{ get; set; }
public DateTime? Date { get; set; }
}
现在,我使用我的模型作为我的 dto 在我的控制器和我的 repo 之间打乱数据。由于我所有的下拉过滤器都代表模型属性,因此我将模型传递给 repo 检索方法,检查其属性并根据其值进行过滤?换句话说:
public IEnumerable<TradeSpendRecord> Get(TradeSpendRecord record)
{
IQueryable<tblTradeSpend> query = _context.tblRecords;
if (!String.IsNullOrEmpty(record.CustomerName))
query = query.Where(x => x.CustomerNumber == record.CustomerNumber);
if (!String.IsNullOrEmpty(record.LineOfBusiness))
query = query.Where(r => r.LOB == record.LineOfBusiness);
剪辑
希望这不是太主观,但我想知道是否有人对这是否是好/坏做法有任何意见。我还没有看到很多我需要做的动态过滤示例,我正在寻找一些指导。
谢谢,
克里斯
【问题讨论】:
-
这将 mvc 项目与不理想的 dal 联系在一起,我会选择使用参数或实体项目,其中保留了 dal 和 mvc 项目中使用的实体。这些可以形成两层之间的接口
-
我实际上养成了将我的模型分解为一个单独项目的习惯,正如我所说,我倾向于将它们用作 DTO 在层之间移动数据,并在我的 MVC 项目中使用 ViewModels向视图提供特定数据。
-
只要它正是您需要的,就没有问题。在您的情况下,您只能通过一个属性进行查询,而不是通过它们的组合进行查询。如果您想同时按客户名称和业务范围进行搜索怎么办?但您的代码将仅按业务线进行搜索。
-
@Kate 这并非完全正确。提供的代码应用了一种“瀑布”技术,通过一个接一个地应用过滤器来缩减结果集。
-
@AntP 是的,但前提是您在查询更改之间进行搜索。但我看不到它们之间的任何代码。
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4