我在两周前发布了一个类似的问题,但是在成功调试时遇到了问题。感谢@Stephen Muecke帮助我排除故障。我正在重新发布,因为我对问题的后半部分没有任何牵引力,如下所述。
使用基于membertype的显示公司列表的站点功能,但我遇到了如何使用C#构建列表的问题。当我测试代码时,我得到一个未处理的异常错误,并且调试表明该列表为空。
这是viewmodel:
public class MemberListViewModel
{
public List<string> MemberList { get; set; }
public string MemberType { get; set; }
}
这是控制器代码:
public class MemberListController : Controller
{
public ActionResult MemberList()
{
return PartialView(PrepareMemberListViewModel());
}
private MemberListViewModel PrepareMemberListViewModel()
{
MemberListViewModel viewModel = new MemberListViewModel();
string orgType = "Distributor"; //TODO: hardcoded for dev
DataTable table = new DataTable();
using (var connection = new SqlConnection("Provider=SQLOLEDB;Data Source=db.site.net;Persist Security Info=True;Initial Catalog=DB;User ID=SA;Password=PW"))
{
connection.Open();
if (orgType == "Manufacturer")
{
using (var command = new SqlCommand("SELECT Member FROM dbo.view WHERE [Member Type] = 'Manufacturer' and [Member Code] <> 'Associate - HBW'", connection))
table.Load(command.ExecuteReader());
}
else if (orgType == "HBW")
{
using (var command = new SqlCommand("SELECT Member FROM dbo.view WHERE [Member Type] = 'Manufacturer' and [Member Code] = 'Associate - HBW'", connection))
table.Load(command.ExecuteReader());
}
else
{
using (var command = new SqlCommand("SELECT Member FROM dbo.view WHERE [Member Type] = '" + orgType + "'", connection))
table.Load(command.ExecuteReader());
}
connection.Close();
}
for (int i = 0; i < table.Rows.Count; i++)
{
string memberName = table.Rows[i]["Member"].ToString();
viewModel.MemberList.Add(memberName);
}
return viewModel;
}
}
当我调试时,一切都顺利进行,直到我们到达
viewModel.MemberList.Add(memberName);
在该行,viewModel.Memberlist的本地值固执地保持为null。我已确认该表具有值 - 在本例中为35行,带有公司名称。
我知道我错过了一些简单的东西,但我是一个菜鸟,所以不确定它是什么。提前谢谢!
答案 0 :(得分:2)
您在Add
上调用NULL
方法,因此获得典型的空引用异常。
确保在调用任何方法/访问它之前将其初始化为空集合。
var viewModel = new MemberListViewModel();
viewModel.MemberList= new List<string>();
或使用对象初始化程序语法
var viewModel = new MemberListViewModel
{
MemberList= new List<string>()
};
恕我直言,集合类型属性永远不应为null,如果没有数据,则应为空列表。因此,解决问题的另一种方法是更新类定义,使其具有一个构造函数,将该属性初始化为空列表。
public class MemberListViewModel
{
public List<string> MemberList { get; set; }
public string MemberType { get; set; }
public MemberListViewModel()
{
this.MemberList = new List<string>();
}
}