首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中将IHtmlContent/TagBuilder转换为字符串

在C#中将IHtmlContent/TagBuilder转换为字符串
EN

Stack Overflow用户
提问于 2015-11-12 08:41:05
回答 4查看 28.6K关注 0票数 41

我使用的是ASP.NET 5。我需要将IHtmlContent转换成字符串。

IIHtmlContentASP.NET 5 Microsoft.AspNet.Html.Abstractions命名空间的一部分,是TagBuilder实现的接口。

简化后的我有以下方法

代码语言:javascript
运行
复制
public static IHtmlContent GetContent()
{
    return new HtmlString("<tag>blah</tag>");
}

当我引用它时

代码语言:javascript
运行
复制
string output = GetContent().ToString();

我得到了GetContent()的以下输出

代码语言:javascript
运行
复制
"Microsoft.AspNet.Mvc.Rendering.TagBuilder" 

而不是

代码语言:javascript
运行
复制
<tag>blah</tag>

我想要

我还试过使用StringBuilder

代码语言:javascript
运行
复制
StringBuilder html = new StringBuilder();
html.Append(GetContent());

但它也会附加相同的命名空间,而不是字符串值。

我试着把它投给TagBuilder

代码语言:javascript
运行
复制
TagBuilder content = (TagBuilder)GetContent();

但TagBuilder没有将其转换为字符串的方法

如何将IHtmlContent或TagBuilder转换为字符串?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-12 19:45:11

如果只需将内容输出为字符串,只需添加此方法并将IHtmlContent对象作为参数传递以获得字符串输出:

代码语言:javascript
运行
复制
public static string GetString(IHtmlContent content)
{
    using (var writer = new System.IO.StringWriter())
    {        
        content.WriteTo(writer, HtmlEncoder.Default);
        return writer.ToString();
    } 
}     
票数 59
EN

Stack Overflow用户

发布于 2016-07-21 14:48:26

在上面的回答中补充如下:

HtmlEncoder的新实例在ASP.NET create中无法工作,因为Microsoft.Extensions.WebEncoders名称空间被删除,新的HtmlEncoder类被移动到一个新的名称空间System.Text.Encodings.Web,但是这个类现在被写成一个抽象和密封的类,因此您不能从它创建一个新实例或派生类。

HtmlEncoder.Default传递给该方法,它将工作

代码语言:javascript
运行
复制
public static string GetString(IHtmlContent content)
{
    var writer = new System.IO.StringWriter();
    content.WriteTo(writer, HtmlEncoder.Default);
    return writer.ToString();
}
票数 28
EN

Stack Overflow用户

发布于 2021-11-18 16:21:01

下面是一个扩展方法,您可以像ToString()一样使用它。

代码语言:javascript
运行
复制
    public static string ToHtmlString(this IHtmlContent content)
    {
        if (content is HtmlString htmlString)
        {
            return htmlString.Value;
        }

        using (var writer = new StringWriter())
        {
            content.WriteTo(writer, HtmlEncoder.Default);
            return writer.ToString();
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33667308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档