return 来自 ViewComponent 的自定义 html
return custom html from ViewComponent
在 ASP.NET 核心应用程序中,我想从 ViewComponent return 自定义 html。我可以 return 自定义文本,但是 html 将被编码而不是被嵌入:
public class BannerViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(string param1, int param2)
{
return Content("<strong>some custom html</strong>");
}
}
我在我的 .cshtml 页面中使用它:
@await Component.InvokeAsync("BannerView")
在页面上这将显示为 <strong>some custom html</strong>
而不是 某些自定义 html.
我如何直接 return HTML 而不是来自 ViewComponent 的文本?
您的 ViewComponent 也可以有自己的视图,您可以在那里呈现 html。解决方案如下:
public class BannerViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(string param1, int param2)
{
string model = "<strong>some custom html</strong>";
return View("Index", model);
}
}
将以下内容添加到您的 Views 文件夹:Views\Shared\Components\BannerViewComponent\Index.cshtml
并将以下内容放入 ViewComponent 的视图中:
@model string
@Html.Raw(Model)
您可以将模型更改为 class 而不是字符串,这样您就可以构造 ViewComponent 的输出,但关键部分是 Html.Raw()
方法来输出未编码的 html.
虽然我建议在大多数情况下使用视图(并将所有 HTML 放在视图中,而不是仅仅使用它来输出视图组件创建的 HTML),因为非常您可能需要考虑的简单组件:
视图组件上的Invoke()
方法不需要returnIViewComponentResult
,可以returnHtmlString
.
例如:
public HtmlString Invoke()
{
return new HtmlString(@"<b>Hello World</b>");
}
如果您不想 return 一个视图,您可以 return HTML 这种没有视图的方式:
return new HtmlContentViewComponentResult(new HtmlString("Not bold - <b>bold</b>"));
在 ASP.NET 核心应用程序中,我想从 ViewComponent return 自定义 html。我可以 return 自定义文本,但是 html 将被编码而不是被嵌入:
public class BannerViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(string param1, int param2)
{
return Content("<strong>some custom html</strong>");
}
}
我在我的 .cshtml 页面中使用它:
@await Component.InvokeAsync("BannerView")
在页面上这将显示为 <strong>some custom html</strong>
而不是 某些自定义 html.
我如何直接 return HTML 而不是来自 ViewComponent 的文本?
您的 ViewComponent 也可以有自己的视图,您可以在那里呈现 html。解决方案如下:
public class BannerViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(string param1, int param2)
{
string model = "<strong>some custom html</strong>";
return View("Index", model);
}
}
将以下内容添加到您的 Views 文件夹:Views\Shared\Components\BannerViewComponent\Index.cshtml
并将以下内容放入 ViewComponent 的视图中:
@model string
@Html.Raw(Model)
您可以将模型更改为 class 而不是字符串,这样您就可以构造 ViewComponent 的输出,但关键部分是 Html.Raw()
方法来输出未编码的 html.
虽然我建议在大多数情况下使用视图(并将所有 HTML 放在视图中,而不是仅仅使用它来输出视图组件创建的 HTML),因为非常您可能需要考虑的简单组件:
视图组件上的Invoke()
方法不需要returnIViewComponentResult
,可以returnHtmlString
.
例如:
public HtmlString Invoke()
{
return new HtmlString(@"<b>Hello World</b>");
}
如果您不想 return 一个视图,您可以 return HTML 这种没有视图的方式:
return new HtmlContentViewComponentResult(new HtmlString("Not bold - <b>bold</b>"));