ASP .NET Core - 扩展 @Html.EditorFor 来追加 <span>

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

我正在将旧的 .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”中定义的,但找不到。

下面是最终渲染效果的屏幕截图。

 tag followed by

我知道这是从 .NET 4.8 到 .NET Core 的转换,我一直在搜索如何转换我的代码,但找不到有关如何在 .NET Core 中执行此操作的文档。经过大量搜索后,.NET Core 似乎使用

IHtmlContent
或 HtmlHelper(s),但我不确定 - 因为我找不到任何文档。

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

对于.NET Core,您需要从仅支持.NET Framework MVC的

MvcHtmlString
迁移到
IHtmlContent

实现几乎类似,只需要迁移以下内容:

附加 HTML 附加 HTML 检索已解析的 HTML 检索已解析的 HTML
没有 .NET框架MVC .NET Core MVC
1
HtmlMvcString
IHtmlContent
2 使用
<Tag Builder instance>.InnerHtml += <HTML string>
使用
<Tag Builder instance>.InnerHtml.AppendHtml(<HTML string>)
3 使用
Html.Editor()
htmlText
使用
Html.Editor()
StringWriter
4 使用
MvcHtmlString
实例返回值
使用
HtmlString
实例返回值
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());
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.