C# viewmodel的cshtml渲染编辑器

C# viewmodel的cshtml渲染编辑器,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有以下viewmodel: public MyViewModel { prop string p1 {get;set;} prop string p2 {get;set;} } 在我的razor视图中,我正在尝试实现一个允许此模型版本的表单,这就是我所做的: @model MyViewModel @using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { enctype = "

我有以下viewmodel:

public MyViewModel
{
       prop string p1 {get;set;}
       prop string p2 {get;set;}
}
在我的razor视图中,我正在尝试实现一个允许此模型版本的表单,这就是我所做的:

@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添加或删除属性时,我都必须用新行更新razor视图。 无法在一行中生成允许编辑所有viewmodel属性的表单。我尝试了以下两行,但没有任何效果:

@model MyViewModel
@Html.EditorForModel() //or @Html.EditorFor(model => model)

使用编辑器模板的全部要点是自定义事物的显示方式。如果您只想调用
Html.EditorForModel()
,则可以直接在视图中执行,而不需要任何编辑器模板

这不起作用的原因是,基本上你有一个无限递归
Html.EditorForModel()
将利用编辑器模板(如果有)来呈现模型的字段。从逻辑上讲,您不能在实际的编辑器模板中调用它

如果您想简化工作,您应该为基本类型创建自定义编辑器模板:字符串、日期时间等。然后您可以调用类似于
Html.EditorForModel()
,它将使用这些属性类型的编辑器模板呈现该模型上所有属性的字段。这样,您就可以获得自定义字段,而不必手动指定每个字段。为复杂类型(如
MyViewModel
)创建编辑器模板的唯一原因是,如果您想在那里做一些非常具体的事情。否则,别管它


FWIW,您不应该在编辑器模板中包含实际表单。这在很多层面上都是错误的,会产生比你想象中要解决的问题多得多的问题。

你想制作一个定制的文本框吗?