gpt4 book ai didi

asp.net-mvc - 从递归模型创建表单

转载 作者:行者123 更新时间:2023-12-04 12:11:14 26 4
gpt4 key购买 nike

我有一个这样的递归模型:

public class Node
{
public int Id { get; set; }
public string Text { get; set; }
public IList<Node> Childs { get; set; }

public Node()
{
Childs = new List<Node>();
}
}

我正在使用以下代码构建一棵带有 Razor View 的树:
<ul>
@DisplayNode(Model)
</ul>

@helper DisplayNode(Node node) {
<li>
@node.Text

@if(node.Childs.Any())
{
<ul>
@foreach(var child in node.Childs)
{
@DisplayNode(child)
}
</ul>
}
</li>
}

一切正常,我的树渲染,但我需要在树的每一行上添加一个文本框,我想输入这样的名称:
Childs[0].Childs[1].Childs[2].Text

所以我的模型绑定(bind)将按预期工作。

有没有办法通过使用 EditorTemplates 或其他任何方法来实现这一点?

我想避免在表单提交上使用 javascript 构建输入名称。

最佳答案

您可以使用尊重当前导航上下文的编辑器模板,而不是这样的 @helper .

因此,为 Node 定义一个自定义编辑器模板类型(~/Views/Shared/EditorTemplates/Node.cshtml):

@model Node
<li>
@Html.LabelFor(x => x.Text)
@Html.EditorFor(x => x.Text)
@if (Model.Childs.Any())
{
<ul>
@Html.EditorFor(x => x.Childs)
</ul>
}
</li>

然后在一些主视图中:
@model MyViewModel
<ul>
@Html.EditorFor(x => x.Menu)
</ul>
Menu属性显然是 Node 类型.

关于asp.net-mvc - 从递归模型创建表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11234771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com