1

これは、これにフォローアップされています What does MVC3 do with C# Optional Parameters?MVC3オプションのパラメータ

私は次のシグネチャを持つアクションがあります:サーバー/ショー/ 1 pubErrorsを要求するには

public ViewResult Show(int Id, PublishingErrorSummary pubErrors=null, String title=null) 

はnullではありませんが、タイトル無効である。どのように可能ですか?これらはちょうど2つのオブジェクトですが、文字列は何とかnullになるように管理します。どこでこれを修正できますか?

編集:クラス定義は

public class PublishingErrorSummary 
{ 
    public List<string> StepOneErrors { get; set; } 
    public List<string> StepTwoErrors { get; set; } 
    public List<string> StepThreeErrors { get; set; } 
    public List<string> StepFourErrors { get; set; } 
} 

答えて

3

PublishingErrorSummaryが複雑なオブジェクトである追加しました。既定のモデルバインダーは、常に複雑なオブジェクトを初期化します。デフォルト値をnullに設定することは実際には意味がありません。同じことはtitleパラメータの略です。文字列は参照型で、要求パラメータtitleが送信されないと、デフォルト値はnullになります。

+0

このような迅速な対応に感謝します。 "デフォルトのモデルバインダーは、リクエストでこのモデルのプロパティの1つに対応するキーが見つかると初期化されます" それは意味がありますが、PublishingErrorSummaryのいずれのプロパティにも対応するキーはありません。私は今、クラスの定義を追加しています。複合型は常にデフォルトのバインダーによってインスタンス化されますか?私のルートは典型的なもので、IDのみがオプションで、その他はルートで言及されていません。 –

+0

@ Mariusz.W、あなたは正しいです。このモデルのプロパティに一致するリクエスト内にパラメータがない場合でも、デフォルトのモデルバインダは常に複雑なオブジェクトをインスタンス化します。私は私の答えを更新しました。 –

+0

ありがとう!すべてのリストがnullであるかどうかをチェックします:D今日のカスタムバインダーには気分がありません! –

関連する問題