在asp.net.mvc中扩展html.textbox和html.passwordfor,以显示工具提示,而不是vali



我目前有以下内容:

@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 })

请注意:这不是应根据输入显示/隐藏的验证消息,而是将其视为帮助文本。

您可以创建自己的属性,该属性将工具提示添加到模型元数据中,然后具有自定义的助手方法渲染适当的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。

最新更新