好的,我看到了一些类似的问题。但我无法拼凑出一个解决我特定问题的答案。
基本上,我试图从SQL Server获取数据以将其打印到视图上(简单,对吧?)。问题是:我在视图上发生了许多其他事情。所以,我必须使用一个模型(我认为)。
这就是我所拥有的(我非常(非常非常)非常新的ASP.NET MVC):
模型
以下是我试图写入的首选项(模型/类是注册商)
//display props
public string QUID_Disp { get; set; }
public string QU_User_Disp { get; set; }
public string Admin_User_Disp { get; set; }
public string Reg_User_Disp { get; set; }
public List<Registrar> Events { get; set; }
这是我在控制器中的SQL调用
if (sqlStuff.Admin == "Yes")
{
Registrar users = new Registrar();
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["internet"].ConnectionString))
{
con.Open();
using (SqlCommand da = new SqlCommand("select * from Registrar_Tool_Users", con))
using (SqlDataReader reader = da.ExecuteReader())
{
while (reader.Read())
{
users.Events.Add (new Registrar { QU_User_Disp = reader["QU_User"].ToString(), QUID_Disp = reader["QUID"].ToString(), Admin_User_Disp = reader["Reg_Admin"].ToString() });
}
return View(users.Events);
}
}
并查看:
@model QUTools.Models.Registrar
//Things that are working here......
@{
foreach (var item in Model.Events)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.QU_User_Disp)
</td>
<td>
@Html.DisplayFor(modelItem => item.QUID_Disp)
</td>
<td>
@Html.DisplayFor(modelItem => item.Admin_User_Disp)
</td>
</tr>
}
}
错误发生在
行上users.Events.Add (new Registrar...
并说:
QUT.dll中出现'System.NullReferenceException'类型的异常,但未在用户代码中处理
答案 0 :(得分:1)
您正在 NULL 的属性上调用Add()
方法。 Add()方法适用于非null集合。因此,在调用Events
方法之前,需要将Add()
集合初始化为空集合。
您可以在视图模型类的构造函数中执行此操作。
public class Registrar
{
public string QUID_Disp { get; set; }
public string QU_User_Disp { get; set; }
public string Admin_User_Disp { get; set; }
public string Reg_User_Disp { get; set; }
public List<Registrar> Events { get; set; }
public YourViewModel()
{
Events = new List<Registrar>();
}
}
或者每当您创建一个Registrar对象时。
Registrar users = new Registrar();
users.Events=new List<Registrar>();
或
Registrar users = new Registrar { Events=new List<Registrar>() };
我还建议将属性/类名重命名为更具可读性的名称。看起来你有一个Registrar类,它有一个名为Events
的属性,但它又是Registrar
的列表。以这样的方式命名您的视图模型是一个好主意,它解释了此视图模型/它的属性的用途。例如
public class UserWithEventsVm
{
public string DisplayName {set;get;}
public List<EventVm> Events {set;get;}
//Add other properties as needed by the view
public UserWithEventsVm()
{
Events=new List<EventVm>();
}
}
public class EventVm
{
public int Id {set;get;}
public string EventTitle {set;get;}
}