2011-05-11 9 views
3

2つのプロパティ、1つの文字列、1つの汎用オブジェクトのリストを含む単純なクラスがあります。これは次のようになります。C#の汎用オブジェクトのリスト

public class SessionFieldViewModel 
{ 
    private String _name; 
    public String Name 
    { 
     get { return _name; } 
     set { _name = value; } 
    } 

    private List<Object> _value; 
    public List<Object> Value 
    { 
     get { return _value ?? new List<Object>(); } 
     set { _value = value; } 
    } 
} 

私のメインコード(MVCコントローラ)には、このクラスを手動で設定しようとしています。 WebFormのデータをデフォルトのモデルバインダーを使ってこのクラスに渡すと、これはうまく実装されることに注意してください。

レコードを作成して、私はこれを行うリストに追加しようとして手動:私はこれを行うと、私は

 Guid id = Guid.NewGuid(); 

     var _searchField = new SessionFieldViewModel(); 
     _searchField.Name = "IDGUID"; 
     Object _object = (Object)id; 
     _searchField.Value.Add(_object); 

     _searchFields.Fields.Add(_searchField); 

を「IDGUID」のNameプロパティが移入クラスを得るかが、オブジェクトの総称リストはnullに戻ります。

私はコードをデバッグして、データをすべて表示しているように見えますが、私はそれをやっているようですが、_searchFieldsを調べて調べると、FieldsのValueプロパティに何も表示されません。

アイデア?

ありがとうございます。

トム

+0

?モデルバインダーは、HTTP要求からの値をバインドするために使用されます。あなたのビューはどのように見えますか? POSTアクションはどうですか?なぜあなたは 'List 'を使っていますか?なぜあなたはコンパイル時に型が分からないときにジェネリック?ちょっと役に立たないと思う。 –

答えて

4

tlatourelleゲッターからnullのときに_valueを設定することはありません表示されます。試してみてください

public List<Object> Value 
{ 
    get { return _value ?? (_value = new List<Object>()); } 
    set { _value = value; } 
} 
+0

良いキャッチ。私はそれを見ませんでした。また、このコードはDefault Model Binderを使用しているため、別のユースケースで実際の値を返すので、この部分が壊れているとは考えませんでした。 – tlatourelle

2

_valueList<Object>のインスタンスに設定されていない取得ありません。常にnullです。新しいList<Object>が返され、Objectが追加されましたが、新しく作成されたList<Object>はすぐに破棄されます。

あなたはこのような何かにValueのあなたの定義を変更する必要があります:一般的なリストがnull来るんどこ

private List<Object> _value = new List<Object>(); 
public List<Object> Value 
{ 
    get { return _value; } 
    set { _value = value; } 
} 
関連する問題