6

为了在我的编辑视图中呈现 HTML,我使用了 helper @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()。(我想手动创建它。)

在网上阅读,我发现了几点,想知道其中的区别。

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

编辑器模板(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()`。

4

2 回答 2

2

EditorForModel()DisplayForModel()Html 辅助方法根据ViewData.ModelMetadata. 默认DataAnnotationsModelMetadataProvider根据 DataAnnotation 属性设置 ModelMetadata 的属性。

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

DisplayAttribute不影响上述两个属性ModelMetadata

这就是为什么这两个属性对生成 Html 的影响不同的原因。

于 2013-03-03T17:23:53.003 回答
2

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

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

由此看来,此特定属性仅适用于 DataGrid。

于 2013-03-25T11:53:56.470 回答