为ViewModel而不是CheckBoxList创建EditorTemplate

时间:2012-05-07 18:55:04

标签: asp.net-mvc viewmodel editorfor

我想使用mvc框架的编辑器模板,而不是使用CheckBoxList帮助器控件:

在Shared \ EditorTemplate中我有TemplateViewModel.cshtml

@model ITMS.ViewModels.TemplateViewModel

<p class="checkbox">
@Html.CheckBoxFor(x => x.IsChecked)
@Html.HiddenFor(x => x.Id) 
@Html.LabelFor(x => x.Name)
</p>

由于模板必须与视图模型具有相同的名称...我们在这里:

public class TemplateViewModel
{  
        public bool IsChecked { get; set; }
        public int Id { get; set; }       
        public string Name { get; set; }   
}

在Home \ Delete.cshtml中我有:

@model IEnumerable<ITMS.ViewModels.TemplateViewModel>

@foreach (var item in Model)
{
    @Html.EditorFor(m => item)   
}

Delete.cshtml中的输出完全混乱。

我只是希望我的检查状态和名称可见,并且ID隐藏在某处。

如何更正TemplateViewModel.cshtml / Delete.cshtml?

1 个答案:

答案 0 :(得分:0)

在你的Delete.cshtml摆脱foreach循环,简单地说:

@model IEnumerable<ITMS.ViewModels.TemplateViewModel>
@Html.EditorForModel()

将自动为模型的每个元素(在本例中为集合)呈现编辑器模板,并且您不需要编写任何循环。

还要确保您的编辑器模板位于~/Views/Shared/EditorTemplates/TemplateViewModel.cshtml。在您的问题中,您写了Shared\EditorTemplate这是一个错误的位置(最后忘记了s)。模板按照您必须遵循的约定运作。