2012-02-16 12 views
3

に取り込まれていませんアクションはMyModelを取ります。私のフォームが投稿されているとき、otherModel変数にはid値の0が含まれています。これで、フォームを含むビューにMyModelが渡され、実際にotherModel.idがページに表示されます。問題は、ポストアクションが のフォームデータをotherModelオブジェクトに適切にマーシャリングしていないことであり、私は理由を知りません。MVCモデルクラスは、私はこのように見える2つのMVCモデルを持っているポスト

もう1つの注意:投稿のフォームデータヘッダーを調べると、予想通りのotherModel.idが表示されます。

otherModelオブジェクト内にこのデータが正しく表示されないのはなぜですか?

ありがとうございます!

+1

コントローラーに入っているフォームヘッダーを投稿できますか? – Jesse

+0

また、私はあなたがIDと別のIDを設定するのだろうか? – cpoDesign

+0

otherModelは実際にはパブリックメンバーであり、プロパティではありませんか? –

答えて

1

バインダーをGlobal.asax.csに登録しましたか?

public static void RegisterBinders(ModelBinderDictionary binders) 
{ 
    binders.Add(typeof(MyModel), new MyModelBinder()); 
    // other binders 
} 

これは、次のようなのApplication_Startに呼び出されます。

protected void Application_Start() 
{ 
    RegisterBinders(ModelBinders.Binders); 
} 

PS:私はあなたがカスタムモデルバインダーを使用していると仮定しました。自動バインディングを使用している場合は、命名規則を遵守しているかどうかを確認してください。

+1

彼はモデルのモデルバインダーを作ったと言いませんでした。なぜそれが問題になるのでしょうか? – Falle1234

+0

あなたは正しいです。それは私の前提ですが、カスタムバインディングは上記のような面倒をたくさん解消します。 –

0

otherModelを新しいオブジェクトで初期化する代わりに、PlayerModel otherModel = new OtherModel();のプロパティpublic PlayerModel otherModel { get; set; }を使用してください。 otherModelは、値を正しく割り当てるためにモデルバインダー用のプロパティーセッターが必要です。これにより、ビューを表示するときにプロパティをどのように設定するかを変更する必要が生じる場合があります。オブジェクトを作成し、表示コントローラメソッドまたはモデルを水和するその他の関数で明示的に割り当てます。

0

私はほとんど同じ問題を抱えていました。私のための修正は、マットが言及したように、必要なアクセサを持つ内部オブジェクトをプロパティにすることでした。

public class OuterModel 
{ 
    public OuterModel() 
    { 
     AuxData= new InnerModel(); 
    } 
    public InnerModel AuxData{ get; set; } 
} 

public class InnerModel 
{ 
    Int Id {get; set;} 
} 
関連する問題