2016-03-17 24 views
7

ビューモデルの[Display(Prompt = "This is the placeholder")]属性から入力プレースホルダを取得するように組み込みのasp-forタグヘルパを設定することはできますか。 MVC 5ではASP.NETコア1.0のViewModelメタデータからプレースホルダを入力

[Display(Name="Name", Prompt = "This is the placeholder")]   
public string Name { get; set; } 

私は、エディタのテンプレートに追加のロジックを追加し、ViewData.ModelMetadata.Watermarkプロパティをチェックすることによって、これを達成することができています。例:

@model string 
@{ 
    Dictionary<string, object> htmlAttributes = new Dictionary<string, object>(); 
    htmlAttributes.Add("class", "form-control"); 
    if (!string.IsNullOrWhiteSpace(ViewData.ModelMetadata.Watermark)) 
    { 
     htmlAttributes.Add("placeholder", ViewData.ModelMetadata.Watermark); 
    } 
} 
@Html.Label("") 
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, htmlAttributes) 
@Html.ValidationMessage("", "", new { @class = "text-danger" }) 

しかし、今度はASP.NET Core 1.0で、新しいタグヘルパーアプローチの使用を開始したいと思います。既定では、asp-forヘルパーのビルドでは、単にPromptという属性値が無視されます。例えば、asp-for属性の私自身のカスタム実装を持つ

my-asp-forはオプションであり、保守性と追加ロジックの再利用のために、おそらく私はそれを持っています。 しかし、その後Watermarkプロパティはもはや存在ModelMetadataであるが、すなわちFor.Metadata.Watermarkようなものはありません。

asp-forヘルパーでPromptという値が表示されている唯一の場所は多少隠されています。

enter image description here

だから私は2つの質問があります。 これを行うにはスマートな方法がありますか? つまり、私は明示的にかみそりファイルにそれにそれを指定する必要があり、のviewmodelのメタデータからプレースホルダを取るために悪い習慣ですか?

答えて

15

私はちょうど簡単なテストを行っていると私が正しくあなたを理解すれば、これはテンプレートVSデフォルトで私のために箱から出して動作するように表示されます。

モデル:

public class LoginViewModel 
{ 
    [Required] 
    [EmailAddress] 
    [Display(Name = "Email", Prompt = "[email protected]")] 
    public string Email { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    public string Password { get; set; } 

    [Display(Name = "Remember me?")] 
    public bool RememberMe { get; set; } 
} 

ビュースニペット:

<div class="form-group"> 
    <label asp-for="Email" class="col-md-2 control-label"></label> 
    <div class="col-md-10"> 
     <input asp-for="Email" class="form-control" /> 
     <span asp-validation-for="Email" class="text-danger"></span> 
    </div> 
</div> 

結果:

enter image description here

+0

あまりにも私のために動作します。ありがとう! – Plebsori

+0

'