下面这行导致错误,因为TagBuilder.InnerHtml 是只读属性,您不能使用+= 运算符来分配HTML 字符串:
div.InnerHtml += label.ToString();
您应该对现有的LabelFor 助手使用AppendHtml():
div.InnerHtml.AppendHtml(label);
请注意,.NET Core MVC 不使用 System.Web 命名空间,而是使用 Microsoft.AspNetCore 父命名空间。您应该尝试使用IHtmlContent 来构建您自己的自定义助手而不是MvcHtmlString,按照以下步骤操作:
1) 包括下面提供的所有using 语句以启用IHtmlContent 和IHtmlHelper 实例。
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
2) 使用Microsoft.AspNetCore.Mvc.Rendering.IHtmlHelper 作为参数而不是System.Web.Mvc.HtmlHelper 创建您的自定义助手,如下例所示:
public static IHtmlContent CustomLabelFor<TModel, TProperty>(this IHtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
{
string result;
TagBuilder div = new TagBuilder("div");
div.MergeAttribute("class", "form-group");
var label = helper.LabelFor(expression, new { @class = "control-label col-lg-1" });
div.InnerHtml.AppendHtml(label);
using (var sw = new System.IO.StringWriter())
{
div.WriteTo(sw, System.Text.Encodings.Web.HtmlEncoder.Default);
result = sw.ToString();
}
return new HtmlString(result);
}
注意:此示例帮助程序已在 VS 2017、.NET Core 2.1 中测试。
相关问题:
Create Custom HTML Helper in ASP.Net Core