2011-01-28 29 views
2

虽然我在这个问题中详细描述的问题非常具体,但我想它应该可以帮助像我这样的其他初学程序员。我有以下情况:在我设计的系统中,用户可以选择在数据库中为其搜索设置值(而不是将控制器操作的参数路由到数据库中的对象的ID,正如我以前做过),具有以下字段:如何处理ASP.NET MVC 3中的复杂查询?

  • 电厂(下拉所有现有电厂的列表)
  • 机组(多选列表框显示的发电机组选定的发电厂)
  • 周期(具有可用时间跨度的下拉列表,如“过去7天”和“上个月”)
  • B eginning和End Time(如果不是选择预定义的时间,用户想要定义特定的时间跨度)

如何将这些元素放在页面上并在数据库中搜索指定的值?我的意思是,如何让这个字段成为一个可发送到POST操作的对象,以便它可以与数据库进行比较并获取值?我试图做的事情包括为此创建一个编辑器模板(但我无法理解我在做什么),并且我还尝试创建一个控制器来处理这个查询,所以我可以在另一个中渲染查询页面(但是我最终在页面内部放置了一个页面,用最好的“我喜欢你”的风格)。

你们可以给我一些帮助吗,所以我不必放弃做一名程序员并成为说唱歌手?

+0

我想让你更好地坚持说唱......抱歉只是在开玩笑。你能否详细说明你在哪里很难实现这一点?它是视图,视图模型还是控制器?我做了一些与你正在尝试的东西非常相似的东西,但我不确定要解释什么。 – 2011-01-30 11:07:02

回答

0

我不太从你的问题明白了什么您在视图中过滤的实体,所以我只会将其称为“实体”。 在你的控制器,你应该有一个实体存储库(如果你是unfamilier与存储库模式,你应该看看它) 如果你得到了设置,过滤应该不会太困难:

创建一个视图模型类作为followes:

public class EntityFilterViewModel() 
{ 
    string PowerPlanet {get;set;} 
    string GeneratingUnits {get;set;} 
    string Period{get;set;} // Simplification, you should use timespan or something. 
    DateTime BeginTime {get;set;} 
    DateTime EndTime {get;set;} 
} 

接下来,有一个控制器方法是这样的:

public ActionResult Filter(EntityFilterViewModel model) 
{ 
    var result = from e in _entityRepository.Entites 
        where e.PowerPlanet.Equals(model.PowerPlanet) && 
         e.GeneratingUnits.Equals(model.GeneratingUnits) && 
         e.Periond.Equals(model.Period) 
         // other filters you would want... 

    return View("List", result); // use the overload which takes a view name and a viewmodel object 
} 

你应该记住,虽然考虑到其在网络的用户还没有填写所有字段的情况下过滤表格