我无法解决这个问题 - 请你帮忙。
我有一个简单的模型:
public class Family
{
public long ID { get; set; }
public string FamilyName { get; set; }
public virtual List<Child> Children { get; set; }
}
并使用如下数据进行设置:
Family family = new Family
{
FamilyName = "Smith",
Children = new List<Child>
{
new Child { Name = "Samantha"},
new Child { Name = "Julie"},
new Child { Name = "Michael"},
new Child { Name = "Terrance"},
new Child { Name = "Joseph"},
}
};
然后我将其加载到一个简单的ASP.NET表单中并显示系列模型。我还有一个按钮,可以从家庭中删除相关的孩子。它提交List<Child>
的索引值。
int i = Convert.ToInt32(btn);
family.Children.Remove(family.Children[i]);
然而,无论我尝试删除表单的哪个孩子,总是返回前四个条目。
我们假设我删除了Michael
。我已经跟踪了对象,并且从模型中删除了正确的子项,并且我已经将模型跟踪到ASP页面构建,并且正确的模型值被发送到页面构建器。然而,即使Michael
不在模型中,它也会以某种方式记住他并将其作为结果的一部分返回,总是将最后一个丢弃到最后。
Original List Returned list
------------- -------------
Samantha Samantha
Julie Julie
Michael Michael
Terrance Terrance
Joseph
我在VS-2013,VS-2015和VS-2017中测试了这一点。所有版本都返回相同的结果。
这似乎是VS或.NET中的一个错误,但似乎过于基本而不是真的。任何人都可以找出问题吗?
答案 0 :(得分:0)
很好地提出一个说明问题的项目。真有帮助!
当我运行项目时,它会显示您描述的行为。
如果在从列表中删除子项的行上放置一个断点,您会注意到确实删除了正确的子项。但是当(重新)渲染页面时,会显示错误的值。这是因为文本框中输入的值保存在ModelState中,然后粘贴回来。
举例说明:
如果您将return View(family);
更改为
ModelState.Clear();
return View(family);
您将看到它将按预期运行。
希望这有帮助。