7

MVC3 の editorFor ヘルパーに関して奇妙な問題が発生しています。これが問題です:私はcheckboxListを表示しようとしていますが、明示的にテンプレート名を呼び出さないと機能します。ただし、テンプレート名を使用しようとすると、単にビューモデルを渡す必要があるのに汎用リストを渡そうとしていることを示す例外がスローされます。わかりやすくするために、いくつかのコードを示します。

ビューモデル

public class ChkViewModel
{
  public string ContractName {get;set;}
  public string Contract {get;set;}
  public bool Checked {get;set;}
}

EditorFor テンプレート (ContractTemplate と呼ばれます)

@model Models.ChkViewModel
<p>
    @Html.HiddenFor(x => x.Contract )
    @Html.LabelFor(x => x.ContractName , Model.ContractName )
    @Html.CheckBoxFor(x => x.Checked, new { @class = "chkContract" })
&nbsp;       
</p>  

私の見解からの抜粋

<div id="contractContainer">
  @Html.EditorFor(item=>item.ContractList)
</div>

これはうまくいきます。しかし、これをやろうとします:

<div id="contractContainer">
  @Html.EditorFor(item=>item.ContractList, "ContractTemplate")
</div>

InvalidOperationExceptionGenericList ChkViewModelではなく、単純なChkViewModelを渡す必要があるということわざがスローされます。

別のチェックボックスリストを作成しようとしたのですが、それを機能させることができず (チェックボックスを表示することさえできませんでした)、テンプレート名を設定しようとしたときに、少なくともチェックボックスを表示できるようにしたためです。そのエラーをスローしました。

4

1 に答える 1

6

エラー メッセージは正しいです。テンプレート名を使用する場合は、次のようになります。

<div id="contractContainer">
    @for (int i = 0; i < item.ContractList.Count; i++) {
        @Html.EditorFor(item => item.ContractList[i], "ContractTemplate")
    }
</div> 

これは、最初のケースで ASP.NET MVC がバックグラウンドで行っていることと似ています (コレクションを繰り返し処理し、テンプレートを呼び出します)。

于 2011-11-22T15:05:59.013 に答える