2011-02-08 17 views
0

IEnumerable(AffiliateComponentTypeView)プロパティを含む次のViewModel(TripSearchView)があります。このコレクションを使用してドロップダウンリストを設定する必要があります。 IEnumerableプロパティからSelectListItemを読み込む拡張クラスを作成しました。IEnumerableからSelectListItemを取り込む際にNULL REFエラーが発生しました<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の2番目のパラメータにNULL参照エラーを取得しています方法です。 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
<%: 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がnullでないことを確認していますか?自分自身のサービスがヌル・リフレクション例外を投げないと確信していますか?これらはIEnumerableなので、実行が制限される可能性があります。

+0

Rene、私もあなたの提案を試みましたが、同じエラーが発生しました。 – Alex

+0

私はまだ同じエラーが発生します。 – Alex

+0

Reneをごめんなさい。あなたたちは正しい、それは私の悪かった。 "Model.TripSearch.ComponentType.ToString()"はNULLで、DropDownの名前を参照していました。 – Alex

1

まあ、私は3つのオプションを考えることができます。

  • Model.ComponentTypes
  • (あなたはそれがないと言うが、私は何かは、あなたがそれだと思う方法ではありませんと仮定しなければならない)nullですModel.ComponentTypesにおける構成要素の一つがヌル
  • 構成要素の一つがヌルComponentDesc又はComponent_Type
を有しています

この方法ではselectedIdパラメータを使用していないことに注意してください。 (あなたはまた、拡張メソッドを持っているという事実を何らかの理由で使っていません...)

+0

Jon、コントローラアクションを追加して投稿を編集しました。「ComponentTypes」に値が入力されていることがわかりました。デバッグ中に確認しました。確かに、ViewData ["ComponentTypesList"]にSelectListItemを設定しましたが、ViewにObject Refエラーが表示されます。私は現在selectdIdを使用していません。私はあなたが何を意味するかわからない "何らかの理由で拡張メソッドを持っているという事実を使用していない..." – Alex

+0

申し訳ありませんJon。あなたたちは正しい、それは私の悪かった。 "Model.TripSearch.ComponentType.ToString()"はNULLで、DropDownの名前を参照していました。 – Alex

関連する問題