Asp.net 从IEnumerable填充SelectListItem时出现NULL REF错误<;T>;

Asp.net 从IEnumerable填充SelectListItem时出现NULL REF错误<;T>;,asp.net,asp.net-mvc-2,Asp.net,Asp.net Mvc 2,我有以下ViewModel(TripSearchView),其中包含IEnumerable(属于AffiliateComponentTypeView)属性,我必须使用此集合填充下拉列表。我已经编写了一个扩展类,它从IEnumerable属性填充SelectListItem public class TripSearchView { public IEnumerable<AffiliateComponentTypeView> ComponentTypes { get; set;

我有以下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
                      });
    }

}

您确定base.GetAffiliationId不为null吗?您确定服务本身不会引发null引用异常吗?请记住,这些是IEnumerable,因此执行可能不同。

好吧,我可以想出三个选项:

  • Model.ComponentTypes
    为空(你说不是,但我必须假设有些东西不是你想象的那样)
  • Model.ComponentTypes
    中的一个组件元素为空
  • 其中一个组件元素具有空的
    ComponentDesc
    component\u类型

顺便说一下,我注意到您在方法中没有使用
selectedId
参数。。。你是故意的吗?(由于某些原因,您也没有使用扩展方法这一事实…

Jon,我通过添加控制器操作编辑了我的帖子,您可以看到“ComponentTypes”正在填充值,我在调试时确保了这一点。为了确保这一点,我还使用SelectListItem填充了ViewData[“ComponentTypesList”],它确实进行了填充,但是我的视图中出现了对象引用错误。我现在没有使用selectdId。我不知道你所说的“出于某种原因,你也没有使用扩展方法这一事实……”是什么意思。对不起,Jon。你们是对的,这是我的错。“Model.TripSearch.ComponentType.ToString()”为空,我正在引用它作为下拉名称。Rene,我也尝试了你的建议,但仍然收到相同的错误。抱歉,Rene。你们是对的,这是我的错。“Model.TripSearch.ComponentType.ToString()”为NULL,我正在引用它作为下拉列表名称。
<%= Html.DropDownList(Model.TripSearch.ComponentType.ToString(), DropDownHelper.ToSelectListItems(Model.TripSearch.ComponentTypes,0))%>
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);

}
<%: Html.DropDownList(
Model.ComponentType.ToString(), 
Model.TripSearch.ComponentTypes.ToSelectListItems(0))
%> 
    return componentTypes.Select(
      componentType =>
         new SelectListItem 
            { Text = componentType==null?"empty":ComponentType.ComponentDesc,
              Value = componentType==null?"empty":componentType.Component_Type
            })