我有以下viewmodel:
public MyViewModel
{
prop string p1 {get;set;}
prop string p2 {get;set;}
}
在我的剃刀视图中,我正在尝试实现一个允许编辑此模型的表单,这就是我所做的:
@model MyViewModel
@using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.TextBoxFor(model => model.p1)
@Html.TextBoxFor(model => model.p2)
}
这是有效的,但是有点重,因为每次向viewmodel添加或删除属性时,我必须用新行更新我的剃刀视图。 无法在一行中生成允许编辑所有viewmodel属性的表单。我尝试了以下两条线,但它没有任何结果:
@model MyViewModel
@Html.EditorForModel() //or @Html.EditorFor(model => model)
答案 0 :(得分:0)
使用编辑器模板的整个过程就是自定义事物的呈现方式。如果您只想调用Html.EditorForModel()
,则可以直接在视图中执行此操作,而无需编辑模板。
这个特别不起作用的原因是因为你基本上有一个无限递归。 Html.EditorForModel()
将使用编辑器模板(如果有)来渲染模型的字段。从逻辑上讲,您无法在实际的编辑器模板中调用它。
如果你想简化一些事情,你应该为基本类型创建自定义编辑器模板:String,DateTime等。然后你可以调用像Html.EditorForModel()
这样的东西,它会为那里的所有属性渲染字段model 使用这些属性类型的编辑器模板。这样,您就可以获得自定义字段,而无需手动指定每个字段。为MyViewModel
这样的复杂类型创建编辑器模板的唯一原因是,如果您想在那里做一些非常具体的事情。否则,不管它。
FWIW,您应该永远在编辑器模板中包含实际表单。这么多级别的错误,会产生比你认为的更多问题。