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

时间:2011-09-22 20:38:20

标签: asp.net-mvc-3 razor data-annotations scaffolding mvc-editor-templates

要在我的编辑视图中呈现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; }

属性: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)

问题:

[ScaffoldColumn (false)][Display (AutoGenerateField = false)]

之间有什么区别?

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

2 个答案:

答案 0 :(得分:2)

EditorForModel()DisplayForModel() Html辅助方法决定基于ViewData.ModelMetadata呈现当前模型属性的视图。默认DataAnnotationsModelMetadataProvider基于DataAnnotation属性设置ModelMetadata的属性。

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

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

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

答案 1 :(得分:2)

我也想知道区别,以下内容来自MSDN - http://msdn.microsoft.com/en-us/library/dd411771(v=vs.95).aspx

“AutoGenerateField - 一个值,指示该字段是否包含在自动生成用户界面元素(如列)中。此值由DataGrid控件使用。”

从这看来,这个特殊属性仅适用于DataGrid。