c# - 在 cshtml 中为 View 模型呈现编辑器

标签 c# asp.net-mvc razor

我有以下 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/

相关文章:

razor - 如何将 Archetype 与 Razor 一起使用?

asp.net - mvc 4 razor 中的 radio 选中/取消选中

c# - 垃圾回收,我们应该依赖它吗?

c# - 测试和异常,模拟

c# - 如何在 C# 中使用 UrlMon.dll 中的 CreateUri 方法

asp.net-mvc - ASP.NET MVC/IIS 7.5 : 500 Internal Server Error for static content only

asp.net-mvc - 在 Asp.Net MVC View 中,不呈现 Controller 对模型所做的更改

c# - Session Per Request 模式是如何工作的?

c# If else 语句不区分大小写

c# - 在 mvc 4.0 razor 中添加 nopcommerce 购物车