我正在将旧的 .NET 4.8 应用程序移植到 .NET Core,并且旧应用程序具有自定义代码,该代码扩展了
@Html.EditorFor
以将 <input>
包装在 a 内,并在 <span>
标记之后附加 <input>
(基本上是在输入字段后添加“%”符号)。 我在下面添加了旧代码。
public static MvcHtmlString Addon(this MvcHtmlString htmlText, string text, string classes)
{
var wrapper = new TagBuilder("div");
wrapper.AddCssClass("input-group");
wrapper.AddCssClass(classes);
wrapper.InnerHtml = htmlText.ToHtmlString();
var span = new TagBuilder("span");
span.AddCssClass("input-group-addon");
span.InnerHtml = text;
wrapper.InnerHtml += span.ToString();
return new MvcHtmlString(wrapper.ToString());
}
上面的代码与下面的
@Html.EditorFor
结合使用。
@Html.EditorFor(model => model.PercentageOfControlledSubstances, new { htmlAttributes = new { @class = "form-control short-textfield percent" } }).**Addon**("%", "med-textfield")
编译时出现错误:
对类型“HtmlString”的引用声称它是在“System.Web”中定义的,但找不到。
下面是最终渲染效果的屏幕截图。
我知道这是从 .NET 4.8 到 .NET Core 的转换,我一直在搜索如何转换我的代码,但找不到有关如何在 .NET Core 中执行此操作的文档。经过大量搜索后,.NET Core 似乎使用
IHtmlContent
或 HtmlHelper(s),但我不确定 - 因为我找不到任何文档。
对于.NET Core,您需要从仅支持.NET Framework MVC的
MvcHtmlString
迁移到IHtmlContent
。
实现几乎类似,只需要迁移以下内容:
没有 | .NET框架MVC | .NET Core MVC |
---|---|---|
1 |
|
|
2 | 使用
| 使用
|
3 | 使用
从 htmlText | 使用
从 StringWriter |
4 | 使用 实例返回值 |
使用 实例返回值 |
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;
using System.IO;
using System.Text.Encodings.Web;
public static class HtmlHelperEditorExtensions
{
public static IHtmlContent Addon(this IHtmlContent htmlContent, string text, string classes)
{
var wrapper = new TagBuilder("div");
wrapper.AddCssClass("input-group");
wrapper.AddCssClass(classes);
using (var writer = new StringWriter())
{
htmlContent.WriteTo(writer, HtmlEncoder.Default);
wrapper.InnerHtml.AppendHtml(writer.ToString());
}
var span = new TagBuilder("span");
span.AddCssClass("input-group-addon");
span.InnerHtml.AppendHtml(text);
wrapper.InnerHtml.AppendHtml(span);
using (var writer = new StringWriter())
{
wrapper.WriteTo(writer, HtmlEncoder.Default);
return new HtmlString(writer.ToString());
}
}
}