Эта строка ниже вызывает ошибку, потому что TagBuilder.InnerHtml
является свойством только для чтения, и вы не можете использовать оператор +=
для назначения строки HTML:
div.InnerHtml += label.ToString();
Что вы должны сделать, это использовать AppendHtml()
против существующего LabelFor
помощника:
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.
Связанная проблема:
Создание настраиваемого помощника HTML в ASP.Net Core