我正在尝试构建一个 HTML 助手,它将像HTML.ForLabel助手一样工作,但会将标题属性设置为[Display]注释中的 description 值。我有工具提示部分工作,但我无法htmlAttributes工作。这是我的助手代码public static class LabelWithTooltip{ public static MvcHtmlString Tooltip<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes) { var metaData = ModelMetadata.FromLambdaExpression(expression, helper.ViewData); string htmlFieldName = ExpressionHelper.GetExpressionText(expression); string labelText = metaData.DisplayName ?? metaData.PropertyName ?? htmlFieldName.Split('.').Last(); if (String.IsNullOrEmpty(labelText)) { return MvcHtmlString.Empty; } var label = new TagBuilder("label"); label.Attributes.Add("for", helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); if (!string.IsNullOrEmpty(metaData.Description)) { label.Attributes.Add("title", metaData.Description); label.MergeAttributes(htmlAttributes); } label.SetInnerText(labelText); return MvcHtmlString.Create(label.ToString()); }}这是在视图中调用它的行@Html.Tooltip(model => model.Guid, htmlAttributes: new { @class = "control-label col-md-2" })它没有采用我为 htmlAttributes任何帮助,将不胜感激。
1 回答
www说
TA贡献1775条经验 获得超8个赞
问题是因为htmlAttributes是匿名对象,所以它需要作为 传递object,而不是字典。之后,您可以使用HtmlHelper.AnonymousObjectToHtmlAttributes()将需要与TagBuilder.
像这样:
public static MvcHtmlString Tooltip<TModel, TValue>(
this HtmlHelper<TModel> helper,
Expression<Func<TModel, TValue>> expression,
object htmlAttributes) // Note the signature change.
{
// ... snip
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
label.MergeAttributes(attributes);
// ... snip
}
这将正确地将htmlAttributes与标签合并。
- 1 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消