6

編集ビューでHTMLをレンダリングするには、ヘルパー@Html.EditorForModel()を使用します。の違い:[ScaffoldColumn(false)]と[Display(AutoGenerateField = false)]

マイモデル:

[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()によって作成されるべきではありません。 (私は手動で作成したいと思います)。

インターネットで読むと、いくつかの点がありましたが、その違いを知りたいと思います。

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

が質問:

私はそれを隠すことがしたくないことを思い出し、このフィールドはこれだけ

EditorTemplates(IsGuest.cshtml)によって作成されます

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

なぜできないのですか? @ Html.EditorForModel() `を[Display (AutoGenerateField = false)] have the effect: 'do not generate the HTML field when callingにします。

答えて

2

EditorForModel()およびDisplayForModel() Htmlヘルパーメソッドは、ViewData.ModelMetadataに基づいて現在のモデルのプロパティの表示を決定します。デフォルトのDataAnnotationsModelMetadataProviderは、DataAnnotation属性に基づいてModelMetadataのプロパティを設定します。

ScaffoldColumnAttribute.Scaffoldは、ModelMetadataという2つのプロパティ、つまり「ShowForDisplay」と「ShowForEdit」に影響します。

DisplayAttributeは、上記の2つのプロパティModelMetadataには影響しません。

これは、これらの2つの属性がHtmlの生成に同じ効果を持たない理由です。

1

Iはまた違いを知りたいと思った、以下のMSDNからのものである - http://msdn.microsoft.com/en-us/library/dd411771(v=vs.95).aspx

「AutoGenerateField - フィールドは、このような列のようなユーザインタフェース要素の自動生成に含まれているかどうかを示す値。この値DataGridコントロールで使用されています。

これは、この特定のプロパティはDataGridのみを対象としているようです。

関連する問題