For very simple ViewComponents I'd like to bypass a view and just return an encoded HTML string.
Example:
<ul>
<li>One</li>
<li>Two</li>
<ul>
My self-made implementation is like this:
public class RawHtmlResult : IViewComponentResult
{
public RawHtmlResult(string EncodedHtml)
{
_encodedHtml = EncodedHtml;
}
public string _encodedHtml { get; set; }
public void Execute(ViewComponentContext context)
{
context.Writer.Write(_encodedHtml);
}
public Task ExecuteAsync(ViewComponentContext context)
{
return context.Writer.WriteAsync(_encodedHtml);
}
}
Usage:
public async Task<IViewComponentResult> InvokeAsync(long id)
{
var someArray = await _someService(id);
var ulHelper = new TagBuilder("ul");
var liHelper = new TagBuilder("li");
foreach (var setName in someArray)
{
liHelper = new TagBuilder("li");
liHelper.InnerHtml.Append(setName);
ulHelper.InnerHtml.Append(liHelper);
}
var writer = new System.IO.StringWriter();
ulHelper.WriteTo(writer, new HtmlEncoder());
return new RawHtmlResult(writer.ToString());
}
So far I have not found a suitable IViewComponentResult. Do I miss apoint?
HtmlString. Used it a bit different answer for tag-helper content being encoded. stackoverflow.com/a/35672341/455493 Not sure though on how to use it inside a controllerContent("foo", "text/html");does not work because ViewComponent only support returning String, HtmlString or IViewComponentResult. Thanks for you help!