【发布时间】: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