将多个可选参数传递给Controller Action

时间:2017-04-26 15:53:59

标签: asp.net-mvc-4

我有一个控制器Action,它将一系列活动返回给视图。 (EVENTID,地点,房间,EventDescription,事件类型,的startDateTime,EndDateTime)。用户希望能够通过Venue进行过滤,因此我将Venue添加为动作方法的id

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

现在,他们希望能够通过任何/所有事件类型,开始,结束来过滤事件数据是否已经完成。

我最好将这些作为GET查询参数添加或者定义一个接受所有5个参数的自定义路由,还是有另一个解决方案

如果这改变了建议,我还需要在某些时候添加排序和分页。

1 个答案:

答案 0 :(得分: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