我已經把我的頭髮撕掉了,所以我正在尋求幫助。我已經構建了一個簡短的遞歸HTML助手來顯示列表的列表。我想將任何編輯返回給控制器。一個孩子的孩子不斷回來。當我刪除遞歸,並強制通過「for循環」的第二層時,它似乎工作。任何線索?我即將在RAZOR上撒毛巾,並學習如何在Jquery中完成所有這些...MVC4不會發布帶有嵌套遞歸列表的對象
根據我的代碼,問題出現在這裏,當模型發佈回來時(您會在在後的ActionResult方法註釋):
Node.Name是確定
Node.Children [0]請將.Name是確定
Node.Children [1]請將.Name是確定
節點。兒童[1]。兒童= null(這裏說謊的問題!)
控制器代碼
public ActionResult Y()
{
Node driverTree = new Node() { Name="Level1", Children = new List<Node>() };
driverTree.Children.Add(new Node() { Children = null, Name = "Level2A" });
driverTree.Children.Add(new Node() {Name ="Level2B", Children = new List<Node> {new Node{Name="Level3A", Children=null},
new Node{Name="Level3B", Children=null}}
});
return View(driverTree);
}
[HttpPost]
public ActionResult Y(Node Node)
{
//Keeps returning:
// Node.Name is ok
// Node.Children[0].Name is ok
// Node.Children[1].Name is ok
// Node.Children[1].Children = null (HERE LIES THE PROBLEM!)
int x = 5; //
return View();
}
}
public class Node
{
public string Name { get; set; }
public List<Node> Children { get; set; }
public bool IsChecked { get; set; }
}
查看代碼
@model JqueryUITests.Controllers.Node
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script src="../../Scripts/jquery-ui-1.10.3.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui.unobtrusive-2.1.0.min.js" type="text/javascript"></script>
}
@helper ShowTree(List<JqueryUITests.Controllers.Node> children)
{
<ul>
@for (int i = 0; i < children.Count;i++)
{
<li>
@Html.EditorFor(x => children[i].Name)
@if (children[i].Children != null)
{
@ShowTree(children[i].Children)
}
</li>
}
</ul>
}
@using (Html.BeginForm())
{
<ul id="tree">
<li>
@Html.EditorFor(x=>Model.Name)
@ShowTree(Model.Children)
</li>
</ul>
<p>
<input type="submit" value="Create" />
</p>
}
HTML代碼
<form action="/X/Y" method="post"> <ul id="tree">
<li>
<input class="text-box single-line" id="Name" name="Name" type="text" value="Level1" />
<ul>
<li>
<input class="text-box single-line" id="children_0__Name" name="children[0].Name" type="text" value="Level2A" />
</li>
<li>
<input class="text-box single-line" id="children_1__Name" name="children[1].Name" type="text" value="Level2B" />
<ul>
<li>
<input class="text-box single-line" id="children_0__Name" name="children[0].Name" type="text" value="Level3A" />
</li>
<li>
<input class="text-box single-line" id="children_1__Name" name="children[1].Name" type="text" value="Level3B" />
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>
<input type="submit" value="Create" />
</p>
你可以發佈呈現的HTML標記嗎? – Nenad
你的:@ShowTree(children [i] .Children)永遠不會呈現。你確定它在視圖渲染過程中不是空的嗎? – Nenad
我在屏幕上看到它,所以它正在渲染。在我粘貼的html標記的底部,有一堆「li」和「ul」(對此很抱歉)。但是,從視覺上看,這一切都是按順序排列的 – user2014503