asp.net-mvc-3 - 使用 Html 助手的 Html 内部标签

标签 asp.net-mvc-3 html-helper

如何使用 Html.Label 在标签内添加内联 html 元素?

最佳答案

看起来对于自​​定义助手来说是一个很好的场景:

public static class LabelExtensions
{
    public static MvcHtmlString LabelFor<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper, 
        Expression<Func<TModel, TProperty>> ex, 
        Func<object, HelperResult> template
    )
    {
        var htmlFieldName = ExpressionHelper.GetExpressionText(ex);
        var for = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName);
        var label = new TagBuilder("label");
        label.Attributes["for"] = TagBuilder.CreateSanitizedId(for);
        label.InnerHtml = template(null).ToHtmlString();
        return MvcHtmlString.Create(label.ToString());
    }
}

然后:

@Html.LabelFor(
    x => x.Name, 
    @<span>Hello World</span>
)
<小时/>

更新:

要实现您在评论部分中提出的要求,您可以尝试以下操作:

public static class HtmlHelperExtensions
{
    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> ex, Func<object, HelperResult> template)
    {
        var htmlFieldName = ExpressionHelper.GetExpressionText(ex);
        var propertyName = htmlFieldName.Split('.').Last();
        var label = new TagBuilder("label");
        label.Attributes["for"] = TagBuilder.CreateSanitizedId(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName));
        label.InnerHtml = string.Format(
            "{0} {1}", 
            propertyName,
            template(null).ToHtmlString()
        );
        return MvcHtmlString.Create(label.ToString());
    }
}

然后:

@Html.LabelFor(
    x => x.Name, 
    @<em>mandatory</em>
)

关于asp.net-mvc-3 - 使用 Html 助手的 Html 内部标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5706815/

相关文章:

c# - $.post 中的 URL 包含多个网站

ajax - 部分 View 中的 Asp.net MVC WebGrid 未通过 Ajax 更新

c# - 每条路线的 Controller 工厂

c# - TagBuilder.MergeAttributes 未按预期工作

asp.net-mvc - MVC 4复选框/单选按钮只读

javascript - 无法通过 JQuery 更改 RadioButtonFor 选择

c# - 在 Model ValidationProvider 中使用反射有多糟糕?

asp.net - 带有 %3D 的 URL 链接的 IIS URL 重写

c# - 单击按钮时如何重定向用户?

c# - 在静态类上调用重载的泛型方法