2012-05-04 55 views
0

我的动作是:动作总是返回null

[HttpPost] 
public ViewResult SearchPost(FormCollection frm) 
{ 

    IList <post> p =db.posts.Include("user").ToList(); 


    if (Request.Form["area"] != null)   
    { 
     if ((p!=null) && (p.Any())) 

     { 

      p =p.Where(a=>a.area==Request.Form["area"]).ToList();  

     } 
    }   
    if (Request.Form["floor"] != null)   
    {    
     if ((p!=null) && (p.Any())) 

     { 
      p = p.Where(a => a.floor == 
      Request.Form["floor"]).ToList();        
     } 
    }    
    if (Request.Form["garage"] != null)   
    { 
     if ((p!=null) && (p.Any())) 

     { 
      p = p.Where(a => a.garage == 
      Request.Form["garage"]).ToList();          
     } 
    } 


    return View(p); 
} 

它没有表现出任何差错。但总是返回null。它应该返回过滤后的对象或简单所有帖子而不进行过滤。有什么问题吗 ??我找不到它。

+4

我看不出这可能会返回视图数据'null';每个路径都分配有'p'。它可能是一个空列表,但不是'null'。那么你的意思是别的吗? –

+0

是db.posts.Include(“user”)。ToList()总是空?这是我能看到它的唯一方法将返回null。 – Gage

+2

@Gage'ToList'永远不会返回null。除非他们定义了他们自己的ToList,这看起来不太可能 –

回答

2

我不知道你是在处理同类型的完整签名,但也许试试这个代码,看看您是否得到任何更好的结果:

[HttpPost] 
public ViewResult SearchPost(FormCollection frm) 
{ 
    var area = Request.Form["area"]; 
    var floor = Request.Form["floor"]; 
    var garage = Request.Form["garage"]; 

    return View(db.posts.Include("user") 
     .Where(a => area == null || a.area == area) 
     .Where(a => floor == null || a.floor == floor) 
     .Where(a => garage == null || a.garage == garage).ToList()); 
} 

(这基本上是一个重写代码到一个单一的查询,可能会帮助您调试)

+0

+1 - 我喜欢你如何将空检查移到lambda。 – Ramesh

+0

@Ramesh - Ta。 :-) – Enigmativity