区别:[ScaffoldColumn(false)]和[Display(AutoGenerateField = false)]

rid*_*nsb 6 scaffolding mvc-editor-templates data-annotations razor asp.net-mvc-3

要在我的编辑视图中呈现HTML,我使用帮助器@Html.EditorForModel().

我的模特:

[Required(ErrorMessage = "Campo obrigatório")]
[Display(Name = "Nome completo")]
public string Name { get; set; }

[Required(ErrorMessage = "Campo é obrigatório")]
[StringLength(100, ErrorMessage = "A {0} deve ter pelo menos {2} characteres.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Senha")]
public string Password { get; set; }

[DataType(DataType.Password)]
[Display(Name = "Confirmar senha")]
[Compare("Password", ErrorMessage = "A nova senha e a confirmação da senha não conincidem.")]
public string ConfirmPassword { get; set; }

[Required(ErrorMessage = "Campo obrigatório")]
[Display(Name = "Convidado")]
[UIHint("IsGuest")]
public bool IsGuest { get; set; }

[RequiredIf("IsGuest", true, ErrorMessage = "Campo é obrigatório")]
[ScaffoldColumn(false)]
public string CodeGuest { get; set; }
Run Code Online (Sandbox Code Playgroud)

属性:CodeGuest不应由帮助程序创建@Html.EditorForModel().(我想手动创建它.)

在互联网上阅读,我找到了几点,并想知道其中的区别.

记住我不希望它被隐藏,这个字段只会由此创建

EditorTemplates(IsGuest.cshtml):

@using BindSolution.AndMarried.Model;
@model BindSolution.AndMarried.Models.RegisterModel
@Html.EditorFor(e => e.IsGuest)
<span>TESTE</span>
@Html.EditorFor(e => e.CodeGuest)
Run Code Online (Sandbox Code Playgroud)

题:

有什么区别:[ScaffoldColumn (false)][Display (AutoGenerateField = false)]

为什么我不能制作[Display (AutoGenerateField = false)] have the effect: 'do not generate the HTML field when calling@ Html.EditorForModel()`.

Kib*_*ria 2

EditorForModel()HtmlDisplayForModel()帮助器方法根据ViewData.ModelMetadata. 默认情况DataAnnotationsModelMetadataProvider下根据 DataAnnotation 属性设置 ModelMetadata 的属性。

ScaffoldColumnAttribute.Scaffold影响两个属性,即 ModelMetadataShowForDisplay”和“ ShowForEdit”。

DisplayAttribute不影响 的上述两个属性ModelMetadata

这就是为什么这两个属性对生成 Html 没有相同的效果。