目前我的观点中有以下内容:
@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 })
请注意:它不是应根据输入显示/隐藏的验证消息,将其视为帮助文本。
答案 0 :(得分:2)
您可以创建自己的属性,为模型元数据添加工具提示,然后使用自定义帮助方法呈现相应的html。
e.g。
属性
[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。