你调用的对象是空的。使用非null对象。

时间:2015-06-01 23:23:00

标签: c# asp.net-mvc razor

好的,我有这个让我疯狂的问题,我正在搜索一个网站,它在我的机器上工作得很好但是当我将它上传到gearhost时它只是吹这个错误:

  

对象引用未设置为对象的实例。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.NullReferenceException:不是对象引用   设置为对象的实例。

     

来源错误:

     

第43行:@if(Model!= null)
  第44行:{
   第45行:   if(Model.Any())
  第46行:{

错误出现在第45行,即使我确定我知道它不是null并且它和IEnumerable。

剃刀中的模型声明如下:

@model IEnumerable<Posada> 

如果我发送空搜索,这确实有效,但是当我使用返回行的字符串或其他不返回任何字符串的字符串时,这不会有效。

在我的控制器中,我只返回一个IEnumerable并将其用作模型。

 IEnumerable<Posada> posadas = unitOfWork.PosadaRepository.Get(includeProperties: "Estado,Lugar")
                .Where(p => p.Nombre.ToLowerInvariant().Contains(query) ||
                            p.Estado.Nombre.ToLowerInvariant().Contains(query) ||
                            p.Lugar.Nombre.ToLowerInvariant().Contains(query))

                .OrderBy(p => p.Id)
                .Skip((page - 1)*pagingInfo.ItemsPerPage)
                .Take(pagingInfo.ItemsPerPage);

2 个答案:

答案 0 :(得分:3)

当您枚举NullReferenceException时(执行IEnumerable时),似乎会发生Any()IEnumerable不为null,然后很可能会得到NullReferenceException:

p.Nombre.ToLowerInvariant()
p.Estado.Nombre.ToLowerInvariant()
p.Lugar.Nombre.ToLowerInvariant()
pagingInfo.ItemsPerPage

答案 1 :(得分:1)

记住IEnumberable&lt;&gt;仅在需要时评估查询,如另一个答案所述,当您使用Any()时,您的查询将被评估,在这种情况下,Estado或Lugar都可以为null。尝试类似:

(p.Estado!=null &&  p.Estado.Nombre.ToLowerInvariant().Contains(query) )||
(p.Lugar!=null &&    p.Lugar.Nombre.ToLowerInvariant().Contains(query)))