2

クラス用のカスタムEditorTemplateがViewModelあります(チェックボックスリストが生成されます)。

ビューでは、私のモデルはですが、生成されたHTMLIEnumerable<ViewModel>を呼び出すと、タグの属性は空になります。@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>

'for'属性が空であることがわかります。私は何か間違ったことをしていますか、それともこれはMVC3のデフォルトのバグのようなものEditorTemplateですIEnumerable<T>か?

4

2 に答える 2

1

これを試して:

@Html.EditorFor(model => model)
于 2011-08-02T16:19:19.557 に答える
0

私もこの問題を抱えており、約1時間の非動作ソリューションの後、追加のViewModelを使用してIEnumerableコレクションをラップして解決しました。

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

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 と for 属性は正しく生成されます。
もちろん、モデルの名前を命名規則に合わせることができます:)

于 2013-01-12T22:22:12.743 に答える