1

我正在尝试动态创建一个 div,其中包含 3 个其他 div,但是,在 blazor 结束注入代码之前,浏览器会自动添加关闭标签,这很烦人。有没有办法防止这种情况发生?

int i = 1;

foreach (itemModel item in itemList)
{
  if (i == 1)
  {
    @((MarkupString)"<div>");
  }

  <div></div>

  if (i == 3)
  {
    @((MarkupString)"</div>");
    i = 0;
  }

  i++;
}

期望的输出

<div> <- Parent
  <div></div> <- Child
  <div></div> <- Child
  <div></div> <- Child
</div>

实际输出

  <div></div> <- Parent
  <div></div> <- Child
  <div></div> <- Child
  <div></div> <- Child

有解决方法吗?

4

3 回答 3

0

不知道为什么你把它复杂化了......

<div> <!-- parent -->
@foreach (itemModel item in itemList)
{
   <div></div><!-- child -->
}
</div>

当然,除非问题不完整

于 2020-03-31T11:48:35.290 回答
0

简单的代码就是好的代码。

不要编写 MarkupString,而是告诉编译器何时添加标签。MarkupString 应保留用于呈现包含标记的文本(通常来自数据库的未知标记)

@foreach (var item in new List<string>() { "1", "2", "3" })
{
    int i = 0;
    <div>
        <p>parent @item</p>
        @while (i < 3) {
            <div><p>child @i</p></div>
            i++;
        }
    </div>
}
于 2020-03-31T15:52:47.660 回答
-1

它发送许多步骤来添加元素,而不是加入单个 HTML 字符串

MarketString 的逻辑更像

document.body.innerHTML="";
var c=document.createElement("container")
c.innerHTML="<div>"
while(c.firstChild)document.body.appendChild(c.firstChild);
alert(document.body.innerHTML)


when you send the "<div>" , it will be auto fixed to a full element in the dom tree immediately. 

later you send "</div>" will take no effect

于 2020-03-31T12:33:48.230 回答