我目前有以下内容:
@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。