Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在对列表调用RemoveAt()之后,似乎可以工作,但当EditorFor呈现更新的列表时,仍然会显示removed字段_C#_Asp.net Mvc_Razor_Editorfor - Fatal编程技术网

C# 在对列表调用RemoveAt()之后,似乎可以工作,但当EditorFor呈现更新的列表时,仍然会显示removed字段

C# 在对列表调用RemoveAt()之后,似乎可以工作,但当EditorFor呈现更新的列表时,仍然会显示removed字段,c#,asp.net-mvc,razor,editorfor,C#,Asp.net Mvc,Razor,Editorfor,我正在尝试设置一个视图,用户可以在其中添加和删除人员列表。调试时,使用RemoveAt(I)删除项目后,列表将正确更新,并且在创建视图时检查模型时,删除的项目不存在。但是,在显示列表中每个项的for循环中调用EditorFor(x=>name)后,将呈现正确的项数,但值与模型包含的值不同 我正在使用中的技术来显示每个项目 相关代码: 控制器: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Persons(IList<Pe

我正在尝试设置一个视图,用户可以在其中添加和删除人员列表。调试时,使用
RemoveAt(I)
删除项目后,列表将正确更新,并且在创建视图时检查模型时,删除的项目不存在。但是,在显示列表中每个项的
for
循环中调用
EditorFor(x=>name)
后,将呈现正确的项数,但值与模型包含的值不同

我正在使用中的技术来显示每个项目

相关代码:

控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Persons(IList<Person> persons, string command)
{
    if (!ModelState.IsValid && !command.StartsWith("Delete"))
        return View(persons);
    if (command == "AddNew")
    {
        List<Person> newPersons = persons?.ToList() ?? new List<Person>();
        newPersons.Add(new Person());
        return View(newPersons);
    }
    if (command.StartsWith("Delete"))
    {
        if (int.TryParse(command.Substring(6), out int i))
            persons.RemoveAt(i);
        else
            ModelState.AddModelError("", "There was an error deleting the person.");
        return View(persons);
    }
    return RedirectToAction(command == "Back" ? "Index" : "Summary");
}
Persons.cshtml:

@model IEnumerable<Person>
<div class="text-center">
    <button type="submit" name="command" value="AddNew" class="btn btn-primary btn-lg">
        Add another person
    </button>
</div>
{
    int i = 0;
    foreach (Person person in Model)
    {
        @Html.EditorFor(x => person, "PersonTemplate", $"Persons[{i++}]")
    }
}
<script type="text/javascript>
$(document).on("click", "button[value='Delete']", function() {
    const r = $(this).parent().prev().find("select").attr("name");
    const s = r.substring(8, r.indexOf("]"));
    $(this).val(`Delete${s}`);
})
</script>
  • @Html.EditorFor(x=>x.LastName)
    返回:

安妮·沃克怎么了?在PersonTemplate中,
this.Model
仍然显示
FirstName=“Anne”
LastName=“Walker”
,但输入值使用Larry Jones


无论我在列表中删除哪一个,都会发生这种情况。如果我在列表中有5个人,并且我删除了person#1,那么视图将显示person 1、person 2、person 3和person 4。如果我删除人员4,它仍然显示人员1、2、3和4。如果我删除人员5,它将显示人员1、2、3和4。为什么它不能从模型中呈现正确的值

从数组中删除项目时,已删除项目上方的所有项目将向下移动一个索引。因此1)A 2)B 3)C 4)D 5)E。当你删除项目3时,你得到1)A 2)B 3)D 4)E.@jdweng是正确的,但即使我将列表(删除项目后)转换为新列表并将其传递到视图中,原始项目仍会显示。EditorFor与模型包含的内容不匹配。那么创建数据时的模型和强制转换时的模型是不同的。@jdweng在视图中调试和查看模型时,它不包含在控制器中删除的名称。但它仍然会生成被删除的名称。我找到了它——我必须这样做,之后它就工作了。当你从数组中删除一个项目时,删除项目上方的所有项目都会向下移动一个索引。因此1)A 2)B 3)C 4)D 5)E。当你删除项目3时,你得到1)A 2)B 3)D 4)E.@jdweng是正确的,但即使我将列表(删除项目后)转换为新列表并将其传递到视图中,原始项目仍会显示。EditorFor与模型包含的内容不匹配。那么创建数据时的模型和强制转换时的模型是不同的。@jdweng在视图中调试和查看模型时,它不包含在控制器中删除的名称。但它仍然会生成被删除的名称。我想出来了——我不得不,在那之后,它起作用了。
@model IEnumerable<Person>
<div class="text-center">
    <button type="submit" name="command" value="AddNew" class="btn btn-primary btn-lg">
        Add another person
    </button>
</div>
{
    int i = 0;
    foreach (Person person in Model)
    {
        @Html.EditorFor(x => person, "PersonTemplate", $"Persons[{i++}]")
    }
}
<script type="text/javascript>
$(document).on("click", "button[value='Delete']", function() {
    const r = $(this).parent().prev().find("select").attr("name");
    const s = r.substring(8, r.indexOf("]"));
    $(this).val(`Delete${s}`);
})
</script>
<div class="row px-3 pb-3">
    <div class="col-lg-3 col-md-6">
        @Html.LabelFor(x => x.FirstName, new { @class = "required" })
        @Html.EditorFor(x => x.FirstName, new { htmlattributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(x => x.FirstName)
    </div>
    <div class="col-lg-3 col-md-6">
        @Html.LabelFor(x => x.MiddleName)
        @Html.EditorFor(x => x.MiddleName, new { htmlattributes = new { @class = "form-control" } })
    </div>
    <div class="col-lg-4 col-md-7">
        @Html.LabelFor(x => x.LastName, new { @class = "required" })
        @Html.EditorFor(x => x.LastName, new { htmlattributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(x => x.LastName)
    </div>
</div>
<button type="submit" name="command" value="Delete" class="btn btn-outline-danger">
    Delete
</button>
<input class="text-box single-line" id="Persons_1__FirstName" name="Persons[1].FirstName" type="text" value="Larry" />
<input class="text-box single-line" id="Persons_1__LastName" name="Persons[1].LastName" type="text" value="Jones" />