我正在尝试检测模型中的列表是否包含任何对象,如果包含,则它将在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语句中的代码。但是,我得到了一个Null引用异常,并且编译器从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”语句,为什么还要评估其中的代码?
答案 0 :(得分:0)
您需要检查Model不为空:
if (Model != null && Model.User != null && Model.User.Count() > 0)
{
//do something with the list of objects in html
}