【问题标题】:Create EditorTemplate for a ViewModel instead of a CheckBoxList为 ViewModel 而不是 CheckBoxList 创建 EditorTemplate
【发布时间】:2012-05-07 18:55:03
【问题描述】:

我想使用 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 ?

【问题讨论】:

  • “一团糟”毫无意义。详细描述您的问题。

标签: asp.net-mvc viewmodel editorfor


【解决方案1】:

在你的 Delete.cshtml 中去掉 foreach 循环,简单地:

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

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

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

【讨论】:

  • 感谢 Darin 的作品,但我只是想为什么我应该使用 EditorTemplates 选择这种方法,而不仅仅是使用 DataTypes 注释我的视图模型?或另一种类似的方法。为什么是 EditorTemplate?
  • @Pascal,我理解您使用 DataTypes 注释视图模型的意思,以及这与您编写的自定义编辑器模板有什么关系。编辑器模板的主要好处是它们简化了您的视图代码并为您的输入字段生成正确的名称,以便默认模型绑定器能够反序列化这些值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多