我有以下 View 模型:
public MyViewModel
{
prop string p1 {get;set;}
prop string p2 {get;set;}
}
在我的 Razor View 中,我正在尝试实现一个允许编辑此模型的表单,这就是我所做的:
@model MyViewModel
@using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.TextBoxFor(model => model.p1)
@Html.TextBoxFor(model => model.p2)
}
这是有效的,但它有点繁重,因为每次我向我的 View 模型添加或删除属性时,我都必须用新行更新我的 razor View 。 不可能在一行中生成一个允许编辑所有 View 模型属性的表单。我尝试了以下两行,但没有呈现任何内容:
@model MyViewModel
@Html.EditorForModel() //or @Html.EditorFor(model => model)
最佳答案
使用编辑器模板的全部意义在于自定义事物的呈现方式。如果您只想调用 Html.EditorForModel()
,您可以直接在 View 中执行此操作,根本不需要编辑器模板。
这不是特别有效的原因是因为你基本上有一个无限递归。 Html.EditorForModel()
将利用编辑器模板(如果有的话)来呈现模型的字段。从逻辑上讲,您不能在实际的编辑器模板中调用它。
如果你想简化事情,你应该为基本类型创建自定义编辑器模板:String、DateTime 等。然后你可以调用类似 Html.EditorForModel()
的东西,它将呈现该模型上所有属性的字段使用这些属性类型的编辑器模板。这样,您就可以获得自定义字段,同时仍然不必手动指定每个字段。为像 MyViewModel
这样的复杂类型创建编辑器模板的唯一原因是,如果您想在那里做一些非常具体的事情。否则,别管它。
FWIW,您不应该永远在编辑器模板中包含实际表单。这在很多层面上都是错误的,并且会产生比您认为正在解决的问题多得多的问题。
关于c# - 在 cshtml 中为 View 模型呈现编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43140512/