【问题标题】:Check if Model is empty检查模型是否为空
【发布时间】:2017-12-12 20:10:50
【问题描述】:

如果AccountMediaServerKey 表为空,我正在执行以下查询以获取要查看的数据。模型在视图中抛出空异常错误。知道如何在没有从数据库中获取数据时检查模型是否为空

var MediaKey = (from p in db.AccountMediaServerKey
                where p.Tagger == USID && p.TagTo == USID
                select new MediaServerHomeModel
                {                                 
                    Stream=p.Stream,
                    Event = p.Event,
                    Status = p.Status

                }).FirstOrDefault();

【问题讨论】:

  • if(Model!=null){ //do something on Model } ?
  • 如果 AccountMediaServerKey 表为空,它总是会出错。我按照你的建议尝试了这个选项
  • 哪一行代码抛出错误?您需要包含有问题的相关代码。
  • 鉴于我正在检查@Model.MediaKey.Stream 是否为空,但它总是返回空值
  • 您的视图强类型化到什么?该类结构如何?从您上面的评论来看,它看起来像某个具有MediaKey 属性的类。

标签: asp.net asp.net-mvc linq asp.net-mvc-4


【解决方案1】:

你有两种方法 首先检查您的查询是否为空

if (MediaKey == null)
{
 //do some thing
}

或者您可以在查询之前检查它,如下所示:

没有过滤:

if(db.AccountMediaServerKey.Any())
 {

 }

过滤:

if(db.AccountMediaServerKey.Any(p=> p.Tagger == USID && p.TagTo == USID))
 {

 }

【讨论】:

    【解决方案2】:

    方法FirstOrDefault 返回集合中的第一项或NULL。因此,如果您的表为空,则变量 MediaKey 将具有 NULL 值。如果您将其传递给视图,请确保在访问任何属性之前进行空检查。

    @model MediaServerHomeModel
    <h1>Index</h1>
    @if(Model!=null)
    {
      <p>Model is not null</p>
      <!-- Access Model safely now -->
    }
    

    你必须对其他引用类型属性做同样的事情来防止空引用异常。例如,如果Stream 属性是引用类型,则它可能为空。所以在使用它之前做一个空检查也是安全的。

    @if(Model!=null && Model.Stream!=null)
    {
      <p>Model.Stream is not null</p>
      <!-- Access Model.Stream safely now -->
    }
    

    【讨论】:

    • 我认为 ?. 符号在这里也很有用,如果显示默认值是一个选项,例如:Model?.Status。你的想法?
    • 是的,如果他的 OP 使用的是支持这个的 C# 版本。
    • 您提出了一个有效的观点。我有时会忘记考虑旧版本的平台/语言
    【解决方案3】:

    你只需要这样做

    If(MediaKey==null) 
    { 
       //do something
    }
    

    或者如果你想在 null 时实例化一个新对象,那么你会这样做

    var obj  = MediaKey ?? new MediaServerHomeModel();
    

    返回obj查看

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2015-09-03
      • 1970-01-01
      相关资源
      最近更新 更多