2011-08-02 6 views
2

私はViewModelクラス用のカスタムEditorTemplateを持っています(チェックボックスリストを生成します)。IEnumerable用のMVC3エディタテンプレートは、@ Html.LabelForの 'for'属性を生成しません。

ビューでは、私のモデルはIEnumerable<ViewModel>ですが、私は、生成されたHTMLで@Html.EditorForModel()を呼び出すときforlabelタグの属性が空です。

1つのチェックボックスだけをレンダリングする場合は、すべて正常に動作します。

public class StateViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool Checked { get; set; } 
} 

EditorTemplate:

@model Mcs.Sibs.UI.Web.Models.StateViewModel 

@Html.HiddenFor(x => x.Id) 
<div> 
    @Html.CheckBoxFor(x => x.Checked) 
    @Html.LabelFor(x => x.Checked, Model.Name) 
</div> 

マイビュー:

@model IEnumerable<Mcs.Sibs.UI.Web.Models.StateViewModel> 
@using (Html.BeginForm() 
{  
    @Html.EditorForModel() 
} 

生成されたHTMLは、(1つのチェックボックスのために)次のようになります。

<input type="hidden" value="1" name="[0].Id" data-val-required="The Id field is required." data-val-number="The field Id must be a number." data-val="true"> 
<div> 
<input type="checkbox" value="true" name="[0].Checked" data-val-required="The Checked field is required." data-val="true"> 
<input type="hidden" value="false" name="[0].Checked"> 
<label for="">Checkbox label</label> 

あなたは「のことを見ることができます'属性は空です。 何か間違っているのですか、これはMVC3のデフォルトのEditorTemplateで何らかのバグですIEnumerable<T>

+0

Hmmこれは奇妙です。私はあなたも2番目のパラメータなしでLabelForを呼び出すことを試みたと仮定しますか? –

+0

@ジョン - はい、私は第2パラメータなしで試しましたが、まだ空です。 –

+0

ええと...私はこれに対する答えが何であるかを待つことができません。あなたはあなたのIEnumerableとHtml.EditorFor(model => Model [i])のループをやってみましたか? –

答えて

1

これを試してみてください:

@Html.EditorFor(model => model) 
+0

Nope。何も変わりません。 –

0

私も、私がIEnumerableをコレクションをラップするために、追加のViewModelを使用して解決非作業溶液の程度時間後にこの問題を抱えていました。あなたのビューで、その後

public class MyViewModel 
{ 
    public List<StateViewModel> StateViewModels { get; set; } 
} 

次のコードを試してみてください

@model IEnumerable<Mcs.Sibs.UI.Web.Models.MyViewModel> 
@using (Html.BeginForm() 
{  
    @Html.EditorFor(m => m.StateViewModels) 
} 

IDと属性が正しく生成されるために。
もちろん、モデルの名前を命名規則に適合させることができます:)