IHtmlHelper<Model> 不包含 <Foo>

问题描述 投票:0回答:1

我正在将应用程序从 ASP.NET 4.8 迁移到 ASP.NET Core 6.

我在 ButtonExtensions 类中有以下内容:

public static IHtmlContent HelpButton(this HtmlHelper htmlHelper, Enums.ButtonSize buttonSize = Enums.ButtonSize.Normal)
{
    var button = new TagBuilder("button");

    button.MergeAttribute("type", "button");
    button.MergeAttribute("aria-label", "Help Button");
    button.MergeAttribute("tabindex", "100");

    button.AddCssClass("btn");
    button.AddCssClass("btn-outline-info");
    button.AddCssClass("btn-light");
    button.AddCssClass("help-button");

    if (buttonSize == Enums.ButtonSize.Small)
        button.AddCssClass("btn-sm");
    else if (buttonSize == Enums.ButtonSize.Large)
        button.AddCssClass("btn-lg");

    return BuildButton("Help", BuildInternalIconTag("fa-question-circle"), button);
}

我尝试在 Index.cshtml 文件中使用它:

@Html.HelpButton()

我在 FormLabelExtensions 类中有以下内容:

public static IHtmlContent FormLabelFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, object htmlAttributes = null)
{
    return FormLabelFor(htmlHelper, expression, null, htmlAttributes);
}

private static IHtmlContent FormLabelFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, string labelText, object htmlAttributes)
{
    var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);

    if (attributes.ContainsKey("class"))
        attributes["class"] = $"{attributes["class"]} col-form-label";
    else
        attributes.Add("class", "col-form-label");

    var modelExpressionProvider = htmlHelper.ViewContext?.HttpContext?.RequestServices?.GetService<ModelExpressionProvider>()
        ?? new ModelExpressionProvider(htmlHelper.MetadataProvider);

    var modelExpression = modelExpressionProvider.CreateModelExpression(htmlHelper.ViewData, expression);

    if (!modelExpression.Metadata.IsRequired)
        return htmlHelper.LabelFor(expression, labelText, attributes);

    if (attributes.ContainsKey("class"))
        attributes["class"] = $"{attributes["class"]} required";
    else
        attributes.Add("class", "required");

    return htmlHelper.LabelFor(expression, labelText, attributes);
}

我尝试在 Index.cshtml 文件中使用它:

@Html.FormLabelFor(m => model)

都给我同样的错误。

c# asp.net-core html-helper
1个回答
1
投票

看起来您只需要更改

HtmlHelper<TModel>
即可使用该
IHtmlHelper<TModel>
的接口版本,因为这是 .NET Core 中的正确方法。

例如:

public static IHtmlContent HelpButton(this IHtmlHelper htmlHelper, Enums.ButtonSize buttonSize = Enums.ButtonSize.Normal)
{
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.