IHTmlContent/TagBuilder를 C#의 문자열로 변환
저는 ASP를 사용하고 있습니다.NET 5. IHTML 콘텐츠를 문자열로 변환해야 합니다.
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>
내가 원하는 것
String Builder도 사용해 보았습니다.
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()
충분합니다. 그리고 모든 탈출하는 사업은 레이저가 처리할 것입니다.
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://github.com/aspnet/Mvc/blob/release/2.2/test/Microsoft.AspNetCore.Mvc.Views.TestCommon/HtmlContentUtilities.cs
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();
}
}
언급URL : https://stackoverflow.com/questions/33667308/convert-ihtmlcontent-tagbuilder-to-string-in-c-sharp
'programing' 카테고리의 다른 글
SpinxSE를 사용하는 MariaDB 10.0 (0) | 2023.08.24 |
---|---|
jQuery - 텍스트 영역에서 모든 텍스트 선택 (0) | 2023.08.24 |
작업 표시줄 아래 그림자 제거 (0) | 2023.08.19 |
윈도우즈 파워셸로 숨겨진 파일(도트 파일)을 표시하는 방법 (0) | 2023.08.19 |
Powershell을 사용하여 상위 스코프 변수를 수정하는 방법 (0) | 2023.08.19 |