好的,我刚刚发现了MVC中的EditorForModel
,我想知道何时应该在我的每个属性上使用它而不是EditorFor
?为什么当我添加强类型视图时它不使用它并在每个属性上构建EditorFor
?
我迟到了......但感谢您的信息!
答案 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。