Blazor RenderFragment 到字符串

2024-04-16

我正在开发一个代码块组件.Net 6 Blazor wasm。我需要显示RenderFragment as string并在我的 html 中渲染该组件。

这是我的代码块组件,

<pre class="language-html">
    <code class="language-html">
        @("Some way to get non rendered html from @ChildContent")
    </code>
</pre>

@ChildContent

@code
{
    [Parameter]
    public RenderFragment ChildContent { get; set; }
}

我使用上述组件,

<CodeBlock>
    <Chat></Chat>
</CodeBlock>

预期输出:

<Chat></Chat> 
<!-- This is the input I passed inside as RenderFragment and I need the exact Render Fragement Code; 
not the Rendered Html code of the RenderFragment -->

组件按预期渲染。但无法获取我的非渲染 htmlRenderFragment

一种选择是通过RenderFragment内容作为字符串参数CodeBlock成分。但这会导致重复且不可读HTML。当ChildContent有多行代码。

<CodeBlock Html="@("<Chat></Chat>")">
    <Chat></Chat>
</CodeBlock>

关于如何实现这一目标有任何提示/建议吗?


这是一个很难回答的问题。据我了解,您希望能够呈现ChildContent您的组件的同时还能够查看ChildContent数据为纯文本 Razor 代码,或者 HTML(如果您的文件中有这样的内容)ChildContent, right?

所以一个选择是围绕你的@ChildContent渲染器标签带有<div>并在父组件初始化时为该 div 分配一个唯一的 id。然后创建另一个变量,我们称之为private string RawContent { get; set; }。然后编写一个 javascript 函数,该函数接受 id 值并通过 id 从 DOM 获取元素并返回该元素的innerHTML.

我创建了一个测试项目来尝试它并且它有效。以下是相关的片段。

In your Component.razor file:

@inject IJSRuntime JS
<pre class="language-html">
    <code class="language-html">
        @RawContent
    </code>
</pre>

<div id="@ElementId">
    @ChildContent
</div>
@code
{
    [Parameter]
    public RenderFragment ChildContent { get; set; }
    private ElementReference DivItem { get; set; }
    private string RawContent { get; set; }
    private Guid ElementId { get; set; } = Guid.NewGuid();

    protected async override Task OnInitializedAsync()
    {
        base.OnInitializedAsync();

        RawContent = await JS.InvokeAsync<string>("GetElementHtmlText", ElementId.ToString());
    }
}

然后在你的index.html文件将其添加到 a 的一侧<script>标签,或您的 JavaScript 文件之一:

async function GetElementHtmlText(elementID) {
            await setTimeout(() => {  }, 1);
            console.log(elementID);
            var element = document.getElementById(elementID);
            console.log(element);
            var result = element.innerHTML;
            console.log(result);
            return result;
        }

然后,在您希望使用此组件的任何地方,您都将呈现 HTML 标记并提供原始文本。但是,此函数将返回所有 html 标记原始文本,这意味着您可以获得 razor 标签和 Blazor 插入的空注释元素(即<!--!-->)。但只要您知道您可以解决它们。

我没有这样做,但你可以修改它以调用 JSInterop 函数RawContent的 getter 而不仅仅是在组件初始化时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Blazor RenderFragment 到字符串 的相关文章

  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • SFINAE 如何使用省略号?

    过去 当使用 SFINAE 选择构造函数重载时 我通常使用以下内容 template
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • 从 Code::Blocks 运行程序时出现空白控制台窗口 [重复]

    这个问题在这里已经有答案了 当我尝试在 Code Blocks 中构建并运行新程序时 控制台窗口弹出空白 我必须单击退出按钮才能停止它 它对我尝试过的任何新项目 包括 Hello world 都执行此操作 奇怪的是 它对于我拥有的任何旧项目
  • 从成员函数指针类型生成函子

    我正在尝试简化 通过make fn 预处理参数的函子的生成 通过wrap 对于 arity 的成员函数n 生成函子基本上可以工作 但到目前为止只能通过显式指定成员函数的参数类型来实现 现在我想从它处理的成员函数类型生成正确的函子 struc
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • 受限 AppDomain 中的代码访问安全异常

    Goal 我需要在权限非常有限的 AppDomain 中运行一些代码 它不应该访问任何花哨或不安全的内容 except对于我在其他地方定义的一些辅助方法 我做了什么 我正在创建一个具有所需基本权限的沙箱 AppDomain 并创建一个运行代
  • 在 Xamarin 中获取 OutOfMemoryException

    java lang OutOfMemoryError 考虑增加 JavaMaximumHeapSize Java 执行时内存不足 java exe 我的 Visualstudio Xamarin 项目出现内存不足异常 请帮助我如何解决此问题

随机推荐

  • 在jqGrid的Edit Url中传递参数进行表单编辑

    我在用jgGrid表单编辑 我在其中更新编辑的值 当我点击提交时editurl被叫 在这种情况下 在我的场景中 我必须将两个参数传递给控制器 jqGrid代码 var colname var colHeader var gridData v
  • 有没有一种简单的方法可以从本地 gradle 缓存中删除一个依赖项?

    本地 gradle 缓存存储 maven gradle 依赖项的副本 如何清除gradle缓存 https stackoverflow com q 23025433 4107809涵盖如何清除整个缓存 但不清除单个包 有没有一种简单的方法可
  • 尝试在 Firefox 中安装我的附加组件的 .xpi 文件时,附加组件“似乎已损坏”

    我正在尝试在 Firefox 45 中安装扩展 Firefox 49 也会发生同样的情况 但 Firefox 不允许我这样做 这表明 This add on could not be installed because it appears
  • 为什么 bootstrap.properties 被 spring-cloud-starter-config 忽略?

    我的目标是获取配置world service from a config service 架构 config service有依赖性spring cloud config server at localhost 8888 world ser
  • 强制 R 函数调用自给自足

    我正在寻找一种方法来调用不受其他对象影响的函数 GlobalEnv 看一下下面两个函数 y 3 f1 function x x y f2 function x library dplyr x gt mutate area Sepal Len
  • 引导程序更改 $grid-gutter-width

    我正在使用 Bootstraps 网格系统 我需要一个2px每列之间的空间 我尝试过 Column Gap 但没有任何效果 有人可以帮忙吗 代码 HTML div class container div class row div clas
  • 泛型方法调用重载方法的问题

    我遇到了有趣的事情 在 Java 和 C 中工作相同 Java代码 public class TestStuff public static void main String args Printer p new PrinterImpl p
  • 创建可折叠代码块 Eclipse

    为了使我的代码在 Eclipse 上干净整洁 我想知道用 Any 标签包围的代码是否可以作为函数收回 我使用 eclipse Juno 进行 Android 开发 是的 您可以使用该插件 咖啡字节代码折叠 http market eclip
  • 我的 Redis 自动生成的密钥

    我不知道我的 Redis 版本 4 0 9 到底发生了什么 我正在运行一个应用程序并使用 Redis 来存储我的数据库 但是 然后 Redis 自动创建 3 个新键 Backup1 Backup2 Backup3 并删除我的所有数据 这是我
  • 来自 php 的 jQuery Ajax 响应变量

    我有一个简单的问题 但无法找到我需要的确切解决方案 如何使用 jQuery ajax 调用仅回显两个 PHP 变量的 PHP 文件 并将它们保存到响应中的 javascript 变量中 你会做类似的事情 getJSON ajax respo
  • Amazon S3 上传错误 PermanentRedirectException

    我已经使用 Composer 安装了适用于 PHP 的 Amazon SDK 我复制了示例代码并在我的系统中实现 但是当我尝试上传文件时 我得到以下信息 为了安全起见 我已将路径设为通用 致命错误 未捕获异常 Aws S3 Exceptio
  • 重用黄瓜数据表

    如何跨多个场景或功能文件重用 Cucumber 测试数据 我想绕过表数据代码重复 我当前的功能文件 Scenario At begining unable to click on first When On Sidebar page I c
  • 网格单位向量中的元素替换

    我已经对此感到困惑好几次了 所以这里为其他可能偶然发现同样问题的人提出了一个虚构的问题 考虑这个网格单位向量 a unit 1 3 c cm in npc 我想用新值替换一些元素 自然的方法是 a 1 unit 2 pt a 1 2cm 2
  • 如何使用 javax.mail.internet.MimeBodyPart.setFileName 保留所有字符?

    我需要使用创建邮件javax mail版本 1 6 2 希望尽可能坚持高级方法 并希望避免自己处理字符编码 折叠以及最终获得有效邮件所需的任何内容 我目前正在处理的一个问题是文件名 因为默认情况下javax mail internet Mi
  • 如何在 Tridion 中获取当前登录用户的用户 ID?

    我在 Tridion 中实现了一个功能区工具栏按钮 作为其中的一部分 我需要循环访问一些组件 这需要有效的会话 要在 Tridion 中创建会话 我需要一个用户 ID 如何获取当前用户的User Id windows User Id 下面的
  • PHP 在函数中包含/需要

    是否可以在 PHP 函数内的包含文件中包含 return 语句 我希望这样做 因为我在单独的文件中有很多函数 并且它们在顶部都有大量共享代码 As in function sync include once file php echo Te
  • 快照图像不能用作舞台图标

    我正在尝试将舞台快照中的图像设置为舞台图标 下面的代码演示了它 import javafx application Application import javafx scene Scene import javafx scene imag
  • 视口、窗口、文档

    在下面的代码中 document documentElement clientWidth 1349 document documentElement clientHeight 363 window innerWidth 1366 windo
  • Gradle 多项目定义对根项目的依赖

    我有一个多项目 gradle 构建 以这种方式配置 root projectA projectB 我想在root build gradle所有嵌套项目的依赖项 这是文件 subprojects version 1 0 SNAPSHOT re
  • Blazor RenderFragment 到字符串

    我正在开发一个代码块组件 Net 6 Blazor wasm 我需要显示RenderFragment as string并在我的 html 中渲染该组件 这是我的代码块组件 pre class language html code clas