0

現在、私の見解では次のようになっています。

@Html.PasswordFor(m => m.Password, new { Title = "Passwords must be at least 6 characters long" })

正常に動作しますが、他のすべての情報が存在するため、ビューモデルのツールチップを属性として取得できるのは本当に素晴らしいことであり、ビューに配置するのは面倒なようです。

コードが次のようになるように、属性の値を取得する方法はありますか?

@Html.PasswordFor(m => m.Password, new { Title = m.Password.Tooltip })

注意:入力に基づいて表示/非表示にする必要がある検証メッセージではありません。ヘルプテキストと考えてください。

4

1 に答える 1

2

モデルメタデータにツールチップを追加する独自の属性を作成してから、カスタムヘルパーメソッドで適切なhtmlをレンダリングすることができます。

例えば

属性

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class ToolTipAttribute : Attribute, IMetadataAware
{
    public string Message { get; set; }

    public ToolTipAttribute(string message)
    {
        Message = message;
    }

    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.AdditionalValues["ToolTip"] = Message;
    }
}

ヘルパーメソッド

public static MvcHtmlString PasswordForWithToolTip<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper,
                                                                 Expression<Func<TModel, TEnum>> expression)
{
    var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
    var htmlAttributes = new Dictionary<string, object>();
    if (metadata.AdditionalValues.ContainsKey("ToolTip"))
    {
        var toolTip = metadata.AdditionalValues["ToolTip"] as string;

        if (!string.IsNullOrEmpty(toolTip))
                htmlAttributes.Add("title", toolTip);
    }

    return htmlHelper.PasswordFor(expression, htmlAttributes);
}

ToolTip次に、プロパティを属性で装飾し、を使用する@Html.PasswordFor WithToolTip( x => x.Password)と、適切なHTMLがレンダリングされます。

于 2012-10-24T21:37:52.507 に答える