为什么不使用Html.EditorForModel()

时间:2011-06-30 15:26:52

标签: c# asp.net-mvc-3 html-helper

好的,我刚刚发现了MVC中的EditorForModel,我想知道何时应该在我的每个属性上使用它而不是EditorFor?为什么当我添加强类型视图时它不使用它并在每个属性上构建EditorFor

我迟到了......但感谢您的信息!

4 个答案:

答案 0 :(得分:22)

由于接受的答案是仅限链接的答案(并已被删除),我认为我实际上已经回答了Brad Wilson的博客ASP.NET MVC 2 Templates, Part 1: Introduction中提出的问题。

  

模型表达式是在当前模型上运行的简单助手。 DisplayForModel()行等同于DisplayFor(model => model)。

TL; DR 可以假设EditorFor(model => model)EditorForModel()具有相同的想法;这些辅助方法实现了同样的目的。 EditorForModel()假设模型表达式是传递给视图的@model

以下列模型和视图为例:

public class Person
{
    public string Name {get; set;}
    public Address MailingAddress {get; set;}
}

public class Address
{
    public String Street {get; set;}
    public String City {get; set;}
    public String State {get; set;}
}

Create.cshtml

@model MyNamespace.Models.Person

/* So, you need an Editor for the Person model? */
@Html.EditorForModel()
/*the above is equivalent to @Html.EditorFor(model => model) */

/* you need to specify the Address property that the editor accepts? */
@Html.EditorFor(model => model.MailingAddress)

答案 1 :(得分:3)

您应该尽可能使用它,但有时您需要个人Html.EditorFor用途的可自定义性。

至于为什么内置模板不使用它,这主要是因为它们一般都是愚蠢的,但也因为,如果我记得,它们需要在每个{{周围包装元素(如表行等) 1}}。

答案 2 :(得分:0)

@ Html.EditorForModel()??并放弃编写自己的观点的乐趣? 微笑

除了乐趣之外,这样做的习惯是相当冒险的。考虑以下常见情况 - 您的客户表中的数据库中有一个bool变量,表示IsMale。显然你不想要默认版本(带复选框的IsMale) - 你可能想要一些更友好的东西,比如一个{select,Options ....,/ select}标签,对吧?这就是视图真正开始的地方。这就是定制。每个视图都有一点不同。你有RAZOR引擎,最大限度地利用它!在您的视图中,您可以覆盖任何内容,甚至可以手动键入您自己的整个HTML代码块。

答案 3 :(得分:-5)

我从未使用过EditorFor,也没想过将来会用它。 EditorFor假设它知道你想要什么。你知道当你做某事时会发生什么。

也许如果你正在做一个快速的Mvc尖峰测试其他东西你可能会使用EditorFor。