我试图避免使用视图包来填充Html.DropDownListFor
而没有最好的运气。
我想提取特定SQL表上使用的所有状态代码并选择不同的值。然后,我想使用这些结果填充视图上的下拉列表。
为了做到这一点,我创建了一个List<SelectListItem>
作为我的视图模型的属性。在控制器中,我尝试使用Linq查询来加载List
。如果我单步执行代码,这似乎工作正常(我可以看到查询后List
中有50个条目),但是当页面加载时抛出NullReferenceException
指向{ {1}}。
查看模型
DropDownListFor
控制器
public class ZipCodeIndex
{
public List<ZipCodeTerritory> zipCodeTerritory { get; set; }
[DisplayName("Zip Code")]
public string searchZip { get; set; }
public List<SelectListItem> StateCodes { get; set; }
[DisplayName("Effective on this date")]
public string searchDate { get; set; }
[DisplayName("State")]
public string searchState { get; set; }
[DisplayName("New Territory")]
public string newTerritory { get; set; }
[DisplayName("New Description")]
public string newDescription { get; set; }
[DisplayName("New Effective Date")]
public string newEffectiveDate { get; set; }
public ZipCodeIndex()
{
zipCodeTerritory = new List<ZipCodeTerritory>();
}
}
查看
//Set state code drop down list
search.StateCodes = (from z in db.ZipCodeTerritory
select z.StateCode).Select(x => new SelectListItem
{
Text = x,
Value = x
}).Distinct().ToList();
答案 0 :(得分:0)
这是因为我的控制器中的return
语句而发生的。我设置了一个条件来确定这是否是初始页面加载,如果是这样,只需将用户发送回控制器。因此,return语句只是return View()
,因此我没有向视图发回Model
个对象。以下代码修复了该问题。 (search
是我的视图模型的实例)
//Proceed with search
try
{
//Set state code drop down list
search.StateCodes = (from z in db.ZipCodeTerritory
select z.StateCode).Select(x => new SelectListItem
{
Text = x,
Value = x
}).Distinct().ToList();
//If search criteria is null page is loading for the first time so send blank view OR
if (String.IsNullOrWhiteSpace(search.searchZip) &&
String.IsNullOrWhiteSpace(search.searchDate) &&
String.IsNullOrWhiteSpace(search.searchState))
{
return View(search);
}