2011-11-22 6 views
7

私はMVC3のeditorForヘルパーに関して奇妙な問題があります。ここに事があります:私はcheckboxListを表示しようとしています、そして、もし私がテンプレート名を明示的に呼ぶことがなければ動作します。しかし、私はテンプレート名を使用しようとすると、私は単に私のviewModelを渡す必要があるときに私はジェネリックリストを渡そうとしているという例外をスローします。私はそれがより理解しやすくするためにいくつかのコードを紹介します:asp.net-mvc3 Editorテンプレート名の問題

のViewModel

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> 

それは私が単純でChkViewModelなくGenericList ChkViewModelを渡すために持っていることを言ってInvalidOperationExceptionスローします。

私は別のチェックボックスリストを作成しようとしたため、チェックボックスを表示しなくても動作できなかったため、テンプレート名を設定しようとしたときにのみ質問しています。チェックボックスを参照してください、それはそのエラーをスローしました。

+0

なぜテンプレート名を指定しますか? – epzee

+0

最後の段落で言及したように、私はそれを前もって必要としませんでしたが、別の例を作成しようとしたときにうまく動作しませんでした。また、それがパラメータであれば、それを使用しないでください。私が使っているテンプレートを具体的に知っている方が良いのではないでしょうか? – AdrianoRR

答えて

6

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

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

これは、ASP.NET MVCは、最初にあなたのための舞台裏でやっていることに似ています大文字小文字を区別します(コレクションを繰り返してテンプレートを呼び出します)。

+2

ねえ、ありがとうトーマス、それは働いた。しかし、テンプレート名を渡さないと、最初の例が正しく機能したのはなぜですか?基本的に同じチェックボックスリストです。私はまだmvcが背後で何をするのか分からない。ところで、私はあなたのjqGridヘルパーを改善し続けることを願っています。 – AdrianoRR