2011-02-08 44 views
0

我有以下ViewModel(TripSearchView)其中包含IEnumerable(的AffiliateComponentTypeView)屬性,我必須使用此集合填充下拉列表。我寫了一個擴展類,它從IEnumerable屬性填充SelectListItem。NULL REF錯誤,而從IEnumerable填充SelectListItem <T>

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的第二個參數。我已確認IEnumerable<AffiliateComponentTypeView> ComponentTypes正確填充了值,填充SelectListItem的邏輯正常工作。爲什麼我會得到一個NULL引用錯誤?我錯過了什麼?

<%= 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
<%: 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不爲空?你確定它自己的服務不會拋出空拒絕異常嗎?請記住,這些是IEnumerable,因此可能會執行執行。

+0

Rene,我也嘗試了你的建議,並且仍然出現同樣的錯誤。 – Alex 2011-02-08 15:50:16

+0

我仍然得到相同的錯誤。 – Alex 2011-02-08 16:35:43

1

嗯,我能想到的三個選項:

  • Model.ComponentTypes爲空(你說不是,但我必須假設東西是不是你認爲它是這樣的)
  • 一個在Model.ComponentTypes構成要素爲null
  • 一個構成要素具有空ComponentDescComponent_Type

我注意到你沒有在方法中使用selectedId參數,順便說一句......你的意思是? (由於某種原因,你也沒有使用擴展方法這一事實......)

相關問題