【问题标题】:.net core2 Data isn't null but View Keep saying Data is Null.net core2 数据不为空,但查看一直说数据为空
【发布时间】:2019-12-19 00:39:42
【问题描述】:

我对这个 .Net Core 完全感到困惑,并提前感谢您的帮助。

该网站与我的本地计算机完美配合。我使用的是完全相同的数据库和相同的代码。

但是当我将网站部署到托管公司服务器时。不知何故不断得到 SqlNullValueException: Data is Null。不能对 Null 值调用此方法或属性。

 @model FeedbackViewModel

 @if (Model.Feedbacks != null)
 {
    <p>Number of item = @Model.Feedbacks.Count()</p>
 }

这是一个非常简化的代码版本。 有谁知道为什么如果模型不为空,但是当我要求显示项目数时,由于空值异常而失败?

public class FeedbackViewModel
{
    public IEnumerable<FeedbackModel> Feedbacks { get; set; }
}

//控制器

return View(new FeedbackViewModel
{
     Feedbacks = feedbackRepository.Feedbacks.Where(c => c.FeedbackStatus == true)                                        
 });

【问题讨论】:

  • 您展示了一个视图和视图模型。但是Controller中会发生SqlNullValueException。
  • 嗨,亨克。我将使用控制代码编辑问题,但是。基本上上面的代码说如果它为空,不要做任何事情。但如果它不为空,则显示项目数。为什么它不是空的,但是当涉及到 .count 时,它说空错误
  • 可能是具体化问题?试试Feedbacks = ...Where(c =&gt; c.FeedbackStatus).ToArray()
  • @AliAzra 你确定它不为空吗?当视图被渲染时,feedbackRepository 可能已经是 GCd。通过返回 IQueryable&lt;T&gt; 而不是实际结果,您可以将查询的执行延迟到呈现时间。如果您使用 EF Core,请使用 ToListAsync(),否则使用 ToList() 在返回数据之前检索数据
  • @AliAzra 如果您发布包含调用堆栈的完整异常文本,我怀疑我们会看到从视图到存储库的一系列调用。

标签: c# json asp.net-core .net-core asp.net-core-mvc


【解决方案1】:

将其创建为 List 而不是 IEnumerable 并查看它是否已修复..

public class FeedbackViewModel
{
    public FeedbackViewModel(){
        Feedbacks = new List<FeedbackModel>();
    }
    public List<FeedbackModel> Feedbacks { get; set; }
}


  Feedbacks = feedbackRepository.Feedbacks.Where(c => c.FeedbackStatus == true).ToList();

【讨论】:

    【解决方案2】:

    你应该在末尾添加 ToList()

    return View(new FeedbackViewModel
    {
         Feedbacks = feedbackRepository.Feedbacks.Where(c => c.FeedbackStatus == true).ToList()                                        
    });
    

    【讨论】:

    • 这通常是个好主意,但它无法解释或解决这里的错误。
    【解决方案3】:

    替换这个

    return View(new FeedbackViewModel
    {
         Feedbacks = feedbackRepository.Feedbacks.Where(c => c.FeedbackStatus == true)                                        
     });
    

    return View(new FeedbackViewModel
    {
         Feedbacks = feedbackRepository.Feedbacks.Where(c => c.FeedbackStatus == true).FirstOrDefault()                                        
     });
    

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多