C#:为空检测模型对象时,空引用异常

时间:2019-07-05 23:16:47

标签: c# asp.net-mvc razor model-view-controller

我正在尝试检测模型中的列表是否包含任何对象,如果包含,则它将在razor视图中执行代码,如果不包含,则应跳过代码。我目睹了一些我无法深入探究的异常行为。即使调试时if语句为false,也会忽略null检查,并且if语句中的代码也将得到验证。

模型包含与用户有关的详细信息列表。该模型还具有其他属性,例如

Public List<UserDetails> User {get;set;}
Public List<CompanyDetails> Companies {get;set;}

Controller不会将任何内容传递给该列表(列表未初始化)到视图,因此只是模型的一个实例。在视图上,我尝试使用if语句根据此列表是否为null来切换html,在这种情况下,切换用户详细信息的显示:

if(Model.User != null){
 //do something with the list of objects in html
}

if语句返回“ false”,因此它不应执行if语句中的代码。但是,我得到了一个N​​ull引用异常,并且编译器从if语句内部(在剃刀视图中放置断点时)引发错误。

我尝试了不同的方法,例如制作对象的实例,例如控制器上的空列表

var Model = new UserLocatorModel();
Model.User=new List<UserDetails>();

并将代码更改为:

if(Model.User.Count() != 0){
 //do something with the list of objects in html
}

但这会引入System.ArgumentOutOfRangeException

最后,如果我将一个空的类对象添加到新列表中,则会引入更多问题,因为现在我需要输入列表并检查对象中的一项以查看其是否存在。

代码示例

//model UserLocatorModel

public class UserModel(){
public List<Detail> User {get;set;}
Public List<CompanyDetails> Companies {get;set;}
}

//view
@Model Project.Models.UserLocatorModel
@if(Model.User != null){
  //do something
} 

我希望能够检测到空列表并跳过if语句中的代码,这听起来很基本。预先感谢

:: Edit。这不是一个重复的问题,我试图确定为什么我在使用if语句排除null对象时却得到null引用异常。如果我有一个处理空值的“ if”语句,为什么还要评估其中的代码?

1 个答案:

答案 0 :(得分:0)

您需要检查Model不为空:

if (Model != null && Model.User != null && Model.User.Count() > 0)
{
    //do something with the list of objects in html
}