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を文字列に変換するにはどうすればよいですか?
コンテンツを文字列として出力するだけの場合は、このメソッドを追加し、IHtmlContentオブジェクトをパラメーターとして渡して文字列出力を取得します。
public static string GetString(IHtmlContent content)
{
using (var writer = new System.IO.StringWriter())
{
content.WriteTo(writer, HtmlEncoder.Default);
return writer.ToString();
}
}
上記の答えに追加:
HtmlEncoder
の新しいインスタンスは、ASP.NET Core RTM= 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();
}
ASP.NET Coreは、実際にはいくつかの慎重な最適化を導入しています。 HTML拡張メソッドを作成する場合、最も効率的な方法は文字列を回避することです。
_public static IHtmlContent GetContent(this IHtmlHelper helper)
{
var content = new HtmlContentBuilder()
.AppendHtml("<ol class='content-body'><li>")
.AppendHtml(helper.ActionLink("Home", "Index", "Home"))
.AppendHtml("</li>");
if(SomeCondition())
{
content.AppendHtml(@"<div>
Note `HtmlContentBuilder.AppendHtml()` is Mutable
as well as Fluent/Chainable.
</div>");
}
return content;
}
_
最後にかみそりのビューでは、 -以下のLukášKmochコメントに基づいて無効:@Html.Raw(Html.GetContent())
はもう必要ありません(以前はASP.NET MVC 5で必要でした)。ASP.NET MVC 5 has type MvcHtmlString. You don't need to use Html.Raw()
@Html.GetContent()
を呼び出すだけで十分であり、Razorはすべてのエスケープビジネスを処理します。
public static string HtmlContentToString(IHtmlContent content, HtmlEncoder encoder = null)
{
if (encoder == null)
{
encoder = new HtmlTestEncoder();
}
using (var writer = new StringWriter())
{
content.WriteTo(writer, encoder);
return writer.ToString();
}
}