2011-01-28 81 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 
} 

你應該記住,雖然考慮到其在網絡的用戶還沒有填寫所有字段的情況下過濾表格