Dynamic Blazor动态创建元素并追加子元素

Dynamic Blazor动态创建元素并追加子元素,dynamic,blazor,blazor-webassembly,blazor-jsinterop,Dynamic,Blazor,Blazor Webassembly,Blazor Jsinterop,我想通过Blazor Webassembly中的JSInterop动态创建DIV容器。我的方法是在C#中创建一个CreateElement方法,它在javascript中调用CreateElement并返回一个ElementReference作为结果。但是当我运行下面的代码时,我只得到一个空对象 C#代码: 你不需要JS。Blazor是为了不必操纵DOM而制作的。创建组件。以这种方式操纵DOM违背了制作Blazor的目的。您可能想从@Porkopek提到的的一些基础知识开始,这样做并不是一个很好

我想通过Blazor Webassembly中的JSInterop动态创建DIV容器。我的方法是在C#中创建一个CreateElement方法,它在javascript中调用CreateElement并返回一个ElementReference作为结果。但是当我运行下面的代码时,我只得到一个空对象

C#代码:


你不需要JS。Blazor是为了不必操纵DOM而制作的。创建组件。以这种方式操纵DOM违背了制作Blazor的目的。您可能想从@Porkopek提到的

的一些基础知识开始,这样做并不是一个很好的理由,因为它或多或少会破坏使用Blazor动态呈现标记的目的

如果必须使用
createElement
,则应将JS互操作代码绑定到要调用的
窗口
对象:

window.createDivElement = createElement(element, objectReference) {
  const newDiv = document.createElement("div");
  return element.appendChild(newDiv);
}

旁注,
DotNetObjectReference.Create(this)
用于通过
[JSInvokable]
属性回调C#组件方法,在这里可能不需要。

在JS中这样做有充分的理由吗?而不是C#?
createElement(element, objectReference) {
            const newDiv = document.createElement("div");
            return element.appendChild(newDiv);
        }
window.createDivElement = createElement(element, objectReference) {
  const newDiv = document.createElement("div");
  return element.appendChild(newDiv);
}