2011-09-20 126 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); 
}