2012-02-24 6 views
0

類似のタイトルを見ていますが、私はなぜエラーが発生するのか理解しています。私はEditorForModelを使用するように修正する方法を理解しようとしています。私はこのエラーを取得しています:エディタテンプレート(ラジオボタンリスト)と辞書に渡されたモデルアイテムは[enum]タイプですが、辞書にはモデルタイプが必要ですX

The model item passed into the dictionary is of type 'MyNameSpace.ViewModels.MyData+MyEnum', but this dictionary requires a model item of type 'MyNameSpace.ViewModels.MyData'.

マイモデル:

[UIHint("MyRadioButton")] 
    public MyEnum MyRadioRadioButton { get; set; } 

    // 
    // 
    public enum MyEnum 
    { 
     Choice1, 
     Choice2    
    } 

私はMyRadioButton.cshtmlと呼ばれるEditorTemplateを呼び出すこと[UIHint]を使用しています。さて、私の見解では、@Html.EditorForModelを使ってEditorTemplateを呼び出しています。

@Html.EditorForModel("BasicDetails") 

両方のテンプレートが「/共有/ EditorTemplates /」フォルダにあります。これは、一般的なテンプレートを呼び出しているビューページの一部です。

これはMyRadioButton.cshtmlテンプレートです:

<td> 
    <div class="radio"> 
     @Html.RadioButtonFor(m => m.MyRadioButton, "Choice1")<br /> 
     @Html.RadioButtonFor(m => m.MyRadioButton, "Choice2") 
    </div> 
</td> 

これは(上記@Html.EditorForModelによって呼び出される)BasicDetails.cshtml次のとおりです。

@using MyNameSpace.ViewModels 
@model MyData 
<table> 
    @Html.EditorFor(x => x.FirstName) 
    @Html.EditorFor(x => x.LastName) 
    @Html.EditorFor(x => x.MyRadioButton) //This is where my error is thrown 
</table> 

があるので、私は上記のRadioButtonListのエディタテンプレートで複雑な何かを避けたいです他のものはそこに進んでいます(私は余分なものをすべて取り除き、まだエラーを受けています)。私は特定のradiobuttonlistをさまざまなビューで複数回使用しています(これがコピー/ペーストではなくテンプレートにしたい理由です)。何かアドバイス?

答えて

0

に同じモデルを渡す(名前空間)MyEnumにMyRadioButton.cshtmlにモデルタイプを変更する必要がありますEditorForModelを使用してテンプレートを/EditorTemplates/から取得するだけで、ラジオボタンリストに[UIHint]を使用する代わりに、0123そのテンプレートの中のグループ。これは私のために働き、コピー/貼り付けを最小限に抑える働きをします。

ある時点では、テンプレートのためのテンプレート>テンプレートパラダイムで止まることを学ぶ必要があります。 :)

0

BasicDetails.cshtmlから、としてEditorForを呼び出しています。

つまり、EditorForに渡されるモデルタイプは列挙型です。

しかし、EditorFor Template(MyRadioButton.cshtml)の中では、クラスをモデルとして使用したと思います。エラーです

だから、我々は

または

は今のeditorForテンプレート@Html.EditorFor(x=>x,"MyRadioButton")

+0

これは機能しません。コードをテンプレートにコピー/ペーストするだけです。 – REMESQ