我正在将应用程序从 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)
都给我同样的错误。
看起来您只需要更改
HtmlHelper<TModel>
即可使用该 IHtmlHelper<TModel>
的接口版本,因为这是 .NET Core 中的正确方法。
例如:
public static IHtmlContent HelpButton(this IHtmlHelper htmlHelper, Enums.ButtonSize buttonSize = Enums.ButtonSize.Normal)
{
...
}