检查 ViewModel 中是否有子模型的数据
Check if there data for a sub Model in ViewModel
我有一个包含两个模型的 ViewModel。在视图中我想看看模型中是否有任何数据:
@if (Model.MyModel1 == Empty) { do something }
但我不知道该怎么做。当我删除此检查时,视图工作正常,我可以毫无问题地显示来自模型的数据(当有数据时)。我花了昨天和今天半天的时间尝试了很多我在网上找到的不同方法,但是 none 有效并且 none 讨论了 ViewModels,只有单个模型,所以我想知道这是否是我的问题。我试过:
Model.MyModel1.Any()
Model.MyModel1.AsQueryable().Any()
Model.MyModel1[0].value1 == ""
Model.MyModel1 == null
Model.MyModel1.IsEmptyOrNull()
越来越多地沿着这些方向..
我遇到两种类型的错误,第一种是当我尝试使用像 Model.MyModel1.Any()
这样的函数时
我得到:
RuntimeBinderException: 'System.Linq.EnumerableQuery<MyThing.Models.MyModel1>' does not contain a definition for 'Any'
当我尝试类似 Model.MyModel1[0].value1 == null
的操作时,我得到:
RuntimeBinderException: Cannot apply indexing with [] to an expression of type 'System.Linq.EnumerableQuery<MyThing.Models.MyModle1>'
ViewModel 是:
namespace MyThing.ViewModel
{
public class combinedModel
{
public IQueryable<MyModel1> MyModel1{ get; set; }
public IQueryable<MyModel2> MyModel1{ get; set; }
}
}
当没有数据时,控制器使用此代码:
var combinedModel = new combinedModel();
combinedModel.MyModel1 = Enumerable.Empty<MyModel1>().AsQueryable();
combinedModel.MyModel2 = Enumerable.Empty<MyModel2>().AsQueryable();
return View(combinedModel);
您的第一次尝试就很接近了,Model.MyModel1.Any()
。但是,它测试序列是否有任何元素,因此您想否定该结果以了解它是否为空。
@if (!Model.MyModel1.Any()) { do something }
就我的情况而言,正如 Xiaoy312 指出的那样,由于某些未知原因,我无法在我的视图中使用扩展方法。虽然我相信他的回答是正确的(并且可能是首选方式),但它对我不起作用,所以我发布了有效的方法,以防其他人对扩展方法有同样的问题。在尝试这种方法之前,我会阅读 Xiaoy312 的回答和评论。
要在不使用视图中的扩展方法的情况下检查模型中是否有数据,您可以使用:
(Queryable.Count(Model.MyModel1) < 1 )
我有一个包含两个模型的 ViewModel。在视图中我想看看模型中是否有任何数据:
@if (Model.MyModel1 == Empty) { do something }
但我不知道该怎么做。当我删除此检查时,视图工作正常,我可以毫无问题地显示来自模型的数据(当有数据时)。我花了昨天和今天半天的时间尝试了很多我在网上找到的不同方法,但是 none 有效并且 none 讨论了 ViewModels,只有单个模型,所以我想知道这是否是我的问题。我试过:
Model.MyModel1.Any()
Model.MyModel1.AsQueryable().Any()
Model.MyModel1[0].value1 == ""
Model.MyModel1 == null
Model.MyModel1.IsEmptyOrNull()
越来越多地沿着这些方向..
我遇到两种类型的错误,第一种是当我尝试使用像 Model.MyModel1.Any()
这样的函数时
我得到:
RuntimeBinderException: 'System.Linq.EnumerableQuery<MyThing.Models.MyModel1>' does not contain a definition for 'Any'
当我尝试类似 Model.MyModel1[0].value1 == null
的操作时,我得到:
RuntimeBinderException: Cannot apply indexing with [] to an expression of type 'System.Linq.EnumerableQuery<MyThing.Models.MyModle1>'
ViewModel 是:
namespace MyThing.ViewModel
{
public class combinedModel
{
public IQueryable<MyModel1> MyModel1{ get; set; }
public IQueryable<MyModel2> MyModel1{ get; set; }
}
}
当没有数据时,控制器使用此代码:
var combinedModel = new combinedModel();
combinedModel.MyModel1 = Enumerable.Empty<MyModel1>().AsQueryable();
combinedModel.MyModel2 = Enumerable.Empty<MyModel2>().AsQueryable();
return View(combinedModel);
您的第一次尝试就很接近了,Model.MyModel1.Any()
。但是,它测试序列是否有任何元素,因此您想否定该结果以了解它是否为空。
@if (!Model.MyModel1.Any()) { do something }
就我的情况而言,正如 Xiaoy312 指出的那样,由于某些未知原因,我无法在我的视图中使用扩展方法。虽然我相信他的回答是正确的(并且可能是首选方式),但它对我不起作用,所以我发布了有效的方法,以防其他人对扩展方法有同样的问题。在尝试这种方法之前,我会阅读 Xiaoy312 的回答和评论。
要在不使用视图中的扩展方法的情况下检查模型中是否有数据,您可以使用:
(Queryable.Count(Model.MyModel1) < 1 )