2017-04-26 143 views
0

我有一個控制器將一系列活動返回給視圖的操作。 (EVENTID,地點,房間,EventDescription,事件類型,的startDateTime,EndDateTime)。用戶希望能夠通過場館過濾所以我增加了地點爲ID的操作方法將多個可選參數傳遞給控制器​​操作

ActionResult ListEvents(id string) 
{ 
    ... Get the relevant details and return the view with the model 
} 

現在,他們希望也能夠通過任何/所有事件類型,開始,結束的過濾,是否張貼事件數據已完成。

難道我不如這些添加爲GET查詢參數或定義將接受所有5個參數還是有另一種解決方案

我還需要添加排序和分頁在情況下,這部分點自定義路線改變建議。

回答

1

通常,這些將通過查詢字符串進行處理,但無論您如何確實這樣做都無關緊要。無論如何,參數如何發送,您的操作只需要接受所有參數。唯一需要注意的是標準的C#方法規則(因爲操作只是方法),可選參數必須是方法中的最後一個參數。如果他們是全部可選,那麼即使這不是真正的問題。

基本上,你就必須是這樣的:

public ActionResult ListEvents(string id = null, int? eventID = null, ...) 
{ 

內。然後,你只是這樣做:

var events = db.Events; 

if (eventID.HasValue) 
{ 
    events = events.Where(m => m.EventID == eventId); 
} 

// rinse and repeat for each filter 
+0

感謝克里斯,感覺像它可能與被抽象做。是否可以將GET參數作爲單個數組讀取並遍歷數組元素以查看它們是否與模型屬性匹配? –

+0

否和否。您可以創建一個視圖模型,將所有這些參數作爲屬性接受,並將其綁定到該模型,但您仍然需要檢查是否設置了每個參數,並逐個進行相應的過濾。唯一的另一種可能是使用反射,但不僅速度很慢,而且它可能甚至不能與EF結合使用,因爲where子句需要可轉換爲SQL。 –

相關問題