【问题标题】:Property on model class could not be set to null模型类的属性无法设置为 null
【发布时间】:2018-03-23 14:28:13
【问题描述】:

我的申请基本上只是一个带有问题和多项选择答案的调查。并不是所有的问题都打算问每个人,但只有当一个人选择了对前一个问题的某个答案时。即他们在问题 15 中选择 C,则需要问问题 15.5,否则问问题 16。我只是添加这个分支,所以其他一切都在工作。

我在“问题”类中添加了一个 int 属性“DependentAnswer”,以保存导致询问给定问题的答案的 ID。一个答案可能引发多个问题,但反之则不然。

当我向“Answer”类添加属性“DependentQuestions”时,该属性是一个 int 列表,用于保存任何问题的 id,如果选择给定答案,则应询问这些问题,我收到此错误:'DependentAnswer ''Question' 上的属性无法设置为 'null' 值。您必须将此属性设置为“System.Int32”类型的非空值。

这是我的问题课的重要内容:

public class Question
{
    [Key]
    public int id { get; set; }

    public string question { get; set; }

    public int DependentAnswer { get; set; }
}

这是我的答案课。我创建了一个构造函数,我打算填充 DependentQuestions 列表,但是我收到了一个错误,这似乎与 LINQ 以及 DependentAnswer 在任何不依赖于 a 的问题中为空的事实有关,但我没有足够的经验知道出了什么问题。

public class Answer
{
    [Key]
    public int id { get; set; }

    [Required]
    public string answer { get; set; }

    [Required]//which question does this answer belong to
    public int questionId { get; set; }

    public List<int> DependentQuestions { get; set; }

    public Answer()
    {
        using (dbSurvey db = new dbSurvey())
        {
            var _list = db.Questions.Where(q => q.DependentAnswer == id).Select(q => q.id).ToList();
            if (_list.Any())
            {
                DependentQuestions = _list;
            }
            else
            {
                DependentQuestions.Add(0);
            }
        }
    }
}

【问题讨论】:

  • 旁注 - 永远不要将数据库访问代码放在构造函数中。需要时在控制器中填充DependentQuestions
  • 谢谢@StephenMuecke。我相信你已经猜到了,我还是 C#/ASP.NET 和 MVC 的新手,所以我很感激你的提醒。我确实知道,但忘记了。

标签: c# .net asp.net-mvc linq linq-to-sql


【解决方案1】:

首先在你的构造函数上初始化你的列表,这样它就不会触发错误:

 public Answer()
    {
        DependentQuestions = new List<int>();
        //Your additional logic here
    }

然后,如果您在使用 Question 类时有 null int,则将其设为可空:

public int? DependentAnswer { get; set; }

【讨论】:

  • 您的回答最完整。即使给出的其他答案确实解决了我遇到的具体问题,但如果我先看到您的答案,就会产生另一个错误。
【解决方案2】:

尝试使 DependentAnswer 属性可以为空

public int? DependentAnswer { get; set; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 2014-12-18
    • 2016-07-09
    • 2014-06-01
    • 2014-06-26
    • 2018-01-03
    相关资源
    最近更新 更多