2011-09-20 128 views
0

我有一个操作接受多个要过滤的值。这些值是可选的。我设置了默认值。默认值覆盖我通过的值。默认值为重写值

如果我通过: minAge:40,maxAge:40。这两个值都设置为0。

这是我的控制器上的操作:

[HttpGet] 
    public ActionResult DataTableUpdate(string firstName = "", string lastName = "", int minAge = 0, int maxAge = 0, string currentState = "") 
    { 
     List<DataMember> data = DataMemberCache.GetMembers().FindAll(d => (d.FirstName.Contains(firstName)) && (d.LastName.Contains(lastName)) && (d.Age < minAge) && (d.Age > maxAge) && (d.CurrentState.Contains(currentState))); 
     return PartialView("_DataTable", data); 
    } 

回答

1

在这里看到:Optional parameters in the MVC framework are handled by using nullable-type arguments for controller action methods. 例如,如果一个方法可以采取一个日期作为查询字符串的一部分,但你要到默认的是如果查询字符串参数丢失,今天的日期,你可以在下面的例子中使用这样的代码:

public ActionResult ShowArticles(DateTime? date) 
{ 
    if(!date.HasValue) 
    { 
     date = DateTime.Now; 
    } 
    // ... 
} 

所以,你的代码必须改变这一个:

[HttpGet] 
public ActionResult DataTableUpdate(string firstName, string lastName, int? minAge, int? maxAge, string currentState) 
{ 
    firstName = firstName ?? ""; 
    lastName = lastName ?? ""; 
    minAge = minAge ?? 0; 
    maxAge = maxAge ?? 0; 
    currentState = currentState ?? ""; 
    List<DataMember> data = DataMemberCache.GetMembers().FindAll(d => (d.FirstName.Contains(firstName)) && (d.LastName.Contains(lastName)) && (d.Age < minAge) && (d.Age > maxAge) && (d.CurrentState.Contains(currentState))); 
    return PartialView("_DataTable", data); 
}