检查 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 )