我使用的是ASP.NET 5。我需要将IHtmlContent转换成字符串。
IIHtmlContent
是ASP.NET 5
Microsoft.AspNet.Html.Abstractions
命名空间的一部分,是TagBuilder
实现的接口。
简化后的我有以下方法
public static IHtmlContent GetContent()
{
return new HtmlString("<tag>blah</tag>");
}
当我引用它时
string output = GetContent().ToString();
我得到了GetContent()的以下输出
"Microsoft.AspNet.Mvc.Rendering.TagBuilder"
而不是
<tag>blah</tag>
我想要
我还试过使用StringBuilder
StringBuilder html = new StringBuilder();
html.Append(GetContent());
但它也会附加相同的命名空间,而不是字符串值。
我试着把它投给TagBuilder
TagBuilder content = (TagBuilder)GetContent();
但TagBuilder没有将其转换为字符串的方法
如何将IHtmlContent或TagBuilder转换为字符串?
发布于 2015-11-12 19:45:11
如果只需将内容输出为字符串,只需添加此方法并将IHtmlContent对象作为参数传递以获得字符串输出:
public static string GetString(IHtmlContent content)
{
using (var writer = new System.IO.StringWriter())
{
content.WriteTo(writer, HtmlEncoder.Default);
return writer.ToString();
}
}
发布于 2016-07-21 14:48:26
在上面的回答中补充如下:
HtmlEncoder
的新实例在ASP.NET create中无法工作,因为Microsoft.Extensions.WebEncoders
名称空间被删除,新的HtmlEncoder
类被移动到一个新的名称空间System.Text.Encodings.Web
,但是这个类现在被写成一个抽象和密封的类,因此您不能从它创建一个新实例或派生类。
将HtmlEncoder.Default
传递给该方法,它将工作
public static string GetString(IHtmlContent content)
{
var writer = new System.IO.StringWriter();
content.WriteTo(writer, HtmlEncoder.Default);
return writer.ToString();
}
发布于 2021-11-18 16:21:01
下面是一个扩展方法,您可以像ToString()一样使用它。
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();
}
}
https://stackoverflow.com/questions/33667308
复制相似问题