工具提示 Html 助手

我正在尝试构建一个 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


任何帮助,将不胜感激。


凤凰求蛊
浏览 185回答 1
1回答

www说

问题是因为htmlAttributes是匿名对象,所以它需要作为 传递object,而不是字典。之后,您可以使用HtmlHelper.AnonymousObjectToHtmlAttributes()将需要与TagBuilder.像这样:public static MvcHtmlString Tooltip<TModel, TValue>(&nbsp; &nbsp; this HtmlHelper<TModel> helper,&nbsp;&nbsp; &nbsp; Expression<Func<TModel, TValue>> expression,&nbsp;&nbsp; &nbsp; object htmlAttributes) // Note the signature change.{&nbsp; &nbsp; // ... snip&nbsp; &nbsp; var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);&nbsp; &nbsp; label.MergeAttributes(attributes);&nbsp; &nbsp; // ... snip}这将正确地将htmlAttributes与标签合并。
打开App,查看更多内容
随时随地看视频慕课网APP