2012-03-23 11 views
1

私は明示的なプロパティを持つモデルクラスを持っており、MVCバインダーはそれらをバインドしていないようです。私は、エラーMVCバインド明示的なプロパティ

System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary 

は、この既知の問題であり得ますか?私はgoogleでこれについてのドキュメントを見つけることができません。結合が失敗しているので、呼び出されることはありません

私のクラス

public interface IPdf2Source 
    { 
     string Password { get; set; } 
     string OutputFormatSelected { get; set; } 
    } 

    public class OptionModel : IPdf2Source 
    { 

     public IPdf2Source Pdf2Source 
     { 
      get { return this; } 
     } 


     //Bind Ok 
     public string Email { get; set; } 


     //I get error on these properties while binding. 
     string IPdf2Source.Password { get; set; } 
     string IPdf2Source.OutputFormatSelected { get; set; } 
    } 

ビュー

@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(p => p.Email) 
    @Html.TextBoxFor(p => p.Pdf2Source.Password) 
    @Html.HiddenFor(p=>p.Pdf2Source.OutputFormatSelected) 
} 

コントローラのアクション。明示的に宣言されたプロパティを削除すると、すべて正常に動作します。

public JsonResult ValidateFile(OptionModel formData) 
{ 
} 
+0

コードを表示してください。 –

+0

投稿を更新しました。 – Tomas

+0

あなたの問題をよりよく理解できるように、ご質問にいくつかのコードを示してください。できるだけ多くのコードを追加してください。 –

答えて

0
//I get error on these properties while binding. 
    string IPdf2Source.Password { get; set; } 
    string IPdf2Source.OutputFormatSelected { get; set; } 

なぜでもそこのものはありますか?それは適切な構文ではありません。さらに、これらの値はすでにインターフェイスで定義されています。

編集

あなたは、私が明示的なインターフェイス定義に少し古くなっていた申し訳ありませんが正しいです。実際にあなたはほとんどすべてを完璧にしたように見えますが、今私はそれを見て、私はあなたの問題を見ると思います。明示的な定義をpublicに変更する必要があるようです。

public string IPdf2Source.Password { get; set; } 
    public string IPdf2Source.OutputFormatSelected { get; set; } 
+0

あなたはここに正しくないものを説明できますか?これは明示的なプロパティ宣言であり、このトリックを使用してクラスのプロパティをグループ化します。また、インタフェースにプロパティがある場合、派生クラスで実装する必要があります。 – Tomas

+0

@Tomas - 編集をご覧ください。 –

関連する問題