我有以下ViewModel(TripSearchView),其中包含IEnumerable(AffiliateComponentTypeView)属性,我必须使用此集合填充下拉列表。我编写了一个扩展类,它从IEnumerable属性填充SelectListItem。
public class TripSearchView
{
public IEnumerable<AffiliateComponentTypeView> ComponentTypes { get; set; }
//More fields...
}
public static class DropDownHelper
{
public static IEnumerable<SelectListItem> ToSelectListItems(
this IEnumerable<AffiliateComponentTypeView> componentTypes, int selectedId)
{
return
componentTypes.Select(componentType =>
new SelectListItem
{
Text = componentType.ComponentDesc,
Value = componentType.Component_Type
});
}
}
这就是我在我的aspx中调用它的方法,但是我得到了Html.DropDownList的第二个参数的NULL REFERENCE错误。我已确保IEnumerable<AffiliateComponentTypeView> ComponentTypes
正确填充了值,并且填充SelectListItem的逻辑正常工作。为什么我收到NULL Ref错误?我错过了什么?
<%= Html.DropDownList(Model.TripSearch.ComponentType.ToString(), DropDownHelper.ToSelectListItems(Model.TripSearch.ComponentTypes,0))%>
在调用View之前,我在控制器操作中使用集合填充“ComponentTypes”。
public ActionResult Index()
{
SearchView SearchView = new SearchView();
TripSearchView TripSearchView = new TripSearchView();
TripSearchView.ComponentTypes = _referenceDataService.AffiliateComponentTypes(base.GetAffiliateID());
SearchView.TripSearch = TripSearchView;
ViewData["ComponentTypesList"] = _referenceDataService.AffiliateComponentTypes(base.GetAffiliateID()).Select(componentType =>
new SelectListItem
{
Text = componentType.ComponentDesc,
Value = componentType.Component_Type
});
return View(SearchView);
}
答案 0 :(得分:1)
好吧,我可以想到三个选择:
Model.ComponentTypes
为空(你说它不是,但我必须假设某些不是你认为的那样)Model.ComponentTypes
中的一个组成元素为null ComponentDesc
或Component_Type
我注意到你没有在方法中使用selectedId
参数,顺便说一下......你的意思是? (你也没有使用你有扩展方法的事实,出于某种原因......)
答案 1 :(得分:0)
<%: Html.DropDownList(
Model.ComponentType.ToString(),
Model.TripSearch.ComponentTypes.ToSelectListItems(0))
%>
在你的DropDownHelper
中 return componentTypes.Select(
componentType =>
new SelectListItem
{ Text = componentType==null?"empty":ComponentType.ComponentDesc,
Value = componentType==null?"empty":componentType.Component_Type
})
您确定base.GetAffiliationId不为空吗?你确定它自己的服务不会抛出空的refence异常吗?请记住,这些是IEnumerable,因此可能会被执行。