C# 如何在@html.LabelFor()中指定内容

C# 如何在@html.LabelFor()中指定内容,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我在razor视图中有以下内容: @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" }) 现在,我想在模型名称后面附加以下内容:* 因此,一旦渲染它,它看起来像: <label class="control-label col-md-2">Name <span class="asterisk">*</span&

我在razor视图中有以下内容:

   @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
现在,我想在模型名称后面附加以下内容:
*

因此,一旦渲染它,它看起来像:

<label class="control-label col-md-2">Name <span class="asterisk">*</span></label>
名称*
或者可能是另一种选择


也许我可以覆盖LabelFor方法,以查看该数据模型项是否具有所需的元数据标记,如果是,它将自动添加星号。

您不能覆盖
LabelFor
,但您可以添加自己的HtmlHelper扩展方法:

public static MvcHtmlString RequiredIndicatorLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> modelProperty)
{
   return RequiredIndicatorLabelFor(html, modelProperty, null);
}

public static MvcHtmlString RequiredIndicatorLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> modelProperty, object htmlAttributes)
{
    var htmlAttributesDict = new RouteValueDictionary(htmlAttributes);
    var metadata = ModelMetadata.FromLambdaExpression(modelProperty, html.ViewData);

    // To just add a class to the label tag
    // if (metadata.IsRequired)
    // {
    //     var cssClass = htmlAttributesDict["class"];
    //     htmlAttributesDict["class"] = (cssClass == null) ? "required" : cssClass + " required";
    // }
    // return html.LabelFor(modelProperty, metadata.GetDisplayName(), htmlAttributesDict);

    // To add text/HTML to content of label tag
    var builder = new TagBuilder("label");
    builder.MergeAttribute("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId());
    builder.MergeAttributes(htmlAttributesDict);
    builder.SetInnerText(metadata.GetDisplayName());

    if (metadata.IsRequired)
    {
        var spanBuilder = new TagBuilder("span");
        spanBuilder.AddCssClass("asterisk");
        spanBuilder.SetInnerText("*");
        builder.InnerHtml += " " + spanBuilder.ToString();
    }
    return new MvcHtmlString(builder.ToString());
}
public static MvcHtmlString requiredIndicator标签(此HtmlHelper html,Expression modelProperty)
{
返回RequiredIndicatorLabelFor(html,modelProperty,null);
}
公共静态MvcHtmlString requiredIndicator标签(此HtmlHelper html、表达式模型属性、对象htmlAttributes)
{
var htmlAttributesDict=新的RouteValueDictionary(htmlAttributes);
var metadata=modelmetada.FromLambdaExpression(modelProperty,html.ViewData);
//仅将类添加到标签标记
//if(metadata.IsRequired)
// {
//var cssClass=htmlAttributesDict[“类”];
//htmlAttributesDict[“类”]=(cssClass==null)?“必需”:cssClass+“必需”;
// }
//返回html.LabelFor(modelProperty,metadata.GetDisplayName(),htmlAttributesDict);
//将文本/HTML添加到标签标签的内容
var builder=新标记生成器(“标签”);
builder.MergeAttribute(“for”,html.ViewContext.ViewData.TemplateInfo.getFullHtmlFieldDid());
builder.MergeAttributes(htmlAttributesDict);
SetInnerText(metadata.GetDisplayName());
if(metadata.IsRequired)
{
var spanBuilder=新标记生成器(“span”);
spanBuilder.AddCssClass(“星号”);
spanBuilder.SetInnerText(“*”);
builder.InnerHtml+=“”+spanBuilder.ToString();
}
返回新的MvcHtmlString(builder.ToString());
}

您不能覆盖
LabelFor
,但您可以添加自己的HtmlHelper扩展方法:

public static MvcHtmlString RequiredIndicatorLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> modelProperty)
{
   return RequiredIndicatorLabelFor(html, modelProperty, null);
}

public static MvcHtmlString RequiredIndicatorLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> modelProperty, object htmlAttributes)
{
    var htmlAttributesDict = new RouteValueDictionary(htmlAttributes);
    var metadata = ModelMetadata.FromLambdaExpression(modelProperty, html.ViewData);

    // To just add a class to the label tag
    // if (metadata.IsRequired)
    // {
    //     var cssClass = htmlAttributesDict["class"];
    //     htmlAttributesDict["class"] = (cssClass == null) ? "required" : cssClass + " required";
    // }
    // return html.LabelFor(modelProperty, metadata.GetDisplayName(), htmlAttributesDict);

    // To add text/HTML to content of label tag
    var builder = new TagBuilder("label");
    builder.MergeAttribute("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId());
    builder.MergeAttributes(htmlAttributesDict);
    builder.SetInnerText(metadata.GetDisplayName());

    if (metadata.IsRequired)
    {
        var spanBuilder = new TagBuilder("span");
        spanBuilder.AddCssClass("asterisk");
        spanBuilder.SetInnerText("*");
        builder.InnerHtml += " " + spanBuilder.ToString();
    }
    return new MvcHtmlString(builder.ToString());
}
public static MvcHtmlString requiredIndicator标签(此HtmlHelper html,Expression modelProperty)
{
返回RequiredIndicatorLabelFor(html,modelProperty,null);
}
公共静态MvcHtmlString requiredIndicator标签(此HtmlHelper html、表达式模型属性、对象htmlAttributes)
{
var htmlAttributesDict=新的RouteValueDictionary(htmlAttributes);
var metadata=modelmetada.FromLambdaExpression(modelProperty,html.ViewData);
//仅将类添加到标签标记
//if(metadata.IsRequired)
// {
//var cssClass=htmlAttributesDict[“类”];
//htmlAttributesDict[“类”]=(cssClass==null)?“必需”:cssClass+“必需”;
// }
//返回html.LabelFor(modelProperty,metadata.GetDisplayName(),htmlAttributesDict);
//将文本/HTML添加到标签标签的内容
var builder=新标记生成器(“标签”);
builder.MergeAttribute(“for”,html.ViewContext.ViewData.TemplateInfo.getFullHtmlFieldDid());
builder.MergeAttributes(htmlAttributesDict);
SetInnerText(metadata.GetDisplayName());
if(metadata.IsRequired)
{
var spanBuilder=新标记生成器(“span”);
spanBuilder.AddCssClass(“星号”);
spanBuilder.SetInnerText(“*”);
builder.InnerHtml+=“”+spanBuilder.ToString();
}
返回新的MvcHtmlString(builder.ToString());
}

您不能覆盖
LabelFor
,但您可以添加自己的HtmlHelper扩展方法:

public static MvcHtmlString RequiredIndicatorLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> modelProperty)
{
   return RequiredIndicatorLabelFor(html, modelProperty, null);
}

public static MvcHtmlString RequiredIndicatorLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> modelProperty, object htmlAttributes)
{
    var htmlAttributesDict = new RouteValueDictionary(htmlAttributes);
    var metadata = ModelMetadata.FromLambdaExpression(modelProperty, html.ViewData);

    // To just add a class to the label tag
    // if (metadata.IsRequired)
    // {
    //     var cssClass = htmlAttributesDict["class"];
    //     htmlAttributesDict["class"] = (cssClass == null) ? "required" : cssClass + " required";
    // }
    // return html.LabelFor(modelProperty, metadata.GetDisplayName(), htmlAttributesDict);

    // To add text/HTML to content of label tag
    var builder = new TagBuilder("label");
    builder.MergeAttribute("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId());
    builder.MergeAttributes(htmlAttributesDict);
    builder.SetInnerText(metadata.GetDisplayName());

    if (metadata.IsRequired)
    {
        var spanBuilder = new TagBuilder("span");
        spanBuilder.AddCssClass("asterisk");
        spanBuilder.SetInnerText("*");
        builder.InnerHtml += " " + spanBuilder.ToString();
    }
    return new MvcHtmlString(builder.ToString());
}
public static MvcHtmlString requiredIndicator标签(此HtmlHelper html,Expression modelProperty)
{
返回RequiredIndicatorLabelFor(html,modelProperty,null);
}
公共静态MvcHtmlString requiredIndicator标签(此HtmlHelper html、表达式模型属性、对象htmlAttributes)
{
var htmlAttributesDict=新的RouteValueDictionary(htmlAttributes);
var metadata=modelmetada.FromLambdaExpression(modelProperty,html.ViewData);
//仅将类添加到标签标记
//if(metadata.IsRequired)
// {
//var cssClass=htmlAttributesDict[“类”];
//htmlAttributesDict[“类”]=(cssClass==null)?“必需”:cssClass+“必需”;
// }
//返回html.LabelFor(modelProperty,metadata.GetDisplayName(),htmlAttributesDict);
//将文本/HTML添加到标签标签的内容
var builder=新标记生成器(“标签”);
builder.MergeAttribute(“for”,html.ViewContext.ViewData.TemplateInfo.getFullHtmlFieldDid());
builder.MergeAttributes(htmlAttributesDict);
SetInnerText(metadata.GetDisplayName());
if(metadata.IsRequired)
{
var spanBuilder=新标记生成器(“span”);
spanBuilder.AddCssClass(“星号”);
spanBuilder.SetInnerText(“*”);
builder.InnerHtml+=“”+spanBuilder.ToString();
}
返回新的MvcHtmlString(builder.ToString());
}

您不能覆盖
LabelFor
,但您可以添加自己的HtmlHelper扩展方法:

public static MvcHtmlString RequiredIndicatorLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> modelProperty)
{
   return RequiredIndicatorLabelFor(html, modelProperty, null);
}

public static MvcHtmlString RequiredIndicatorLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> modelProperty, object htmlAttributes)
{
    var htmlAttributesDict = new RouteValueDictionary(htmlAttributes);
    var metadata = ModelMetadata.FromLambdaExpression(modelProperty, html.ViewData);

    // To just add a class to the label tag
    // if (metadata.IsRequired)
    // {
    //     var cssClass = htmlAttributesDict["class"];
    //     htmlAttributesDict["class"] = (cssClass == null) ? "required" : cssClass + " required";
    // }
    // return html.LabelFor(modelProperty, metadata.GetDisplayName(), htmlAttributesDict);

    // To add text/HTML to content of label tag
    var builder = new TagBuilder("label");
    builder.MergeAttribute("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId());
    builder.MergeAttributes(htmlAttributesDict);
    builder.SetInnerText(metadata.GetDisplayName());

    if (metadata.IsRequired)
    {
        var spanBuilder = new TagBuilder("span");
        spanBuilder.AddCssClass("asterisk");
        spanBuilder.SetInnerText("*");
        builder.InnerHtml += " " + spanBuilder.ToString();
    }
    return new MvcHtmlString(builder.ToString());
}
public static MvcHtmlString requiredIndicator标签(此HtmlHelper html,Expression modelProperty)
{
返回RequiredIndicatorLabelFor(html,modelProperty,null);
}
公共静态MvcHtmlString requiredIndicator标签(此HtmlHelper html、表达式模型属性、对象htmlAttributes)
{
var htmlAttributesDict=新的RouteValueDictionary(htmlAttributes);
var metadata=modelmetada.FromLambdaExpression(modelProperty,html.ViewData);
//仅将类添加到标签标记
//if(metadata.IsRequired)
// {
//var cssClass=htmlAttributesDict[“类”];
//htmlAttributesDict[“类”]=(cssClass==null)?“必需”:cssClass+“必需”;
// }
//返回html.LabelFor(modelProperty,metadata.GetDisplayName(),htmlAttributesDict);
//将文本/HTML添加到标签标签的内容
var builder=新标记生成器(“标签”);
builder.MergeAttribute(“for”,html.ViewContext.ViewData.TemplateInfo.getFullHtmlFieldDid());
builder.mergat