VS ASP没有从模型

时间:2017-09-01 10:57:45

标签: asp.net visual-studio

我无法解决这个问题 - 请你帮忙。

我有一个简单的模型:

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中的一个错误,但似乎过于基本而不是真的。任何人都可以找出问题吗?

代码:https://github.com/johnmackerras/wierdVSerror

1 个答案:

答案 0 :(得分:0)

很好地提出一个说明问题的项目。真有帮助!

当我运行项目时,它会显示您描述的行为。

如果在从列表中删除子项的行上放置一个断点,您会注意到确实删除了正确的子项。但是当(重新)渲染页面时,会显示错误的值。这是因为文本框中输入的值保存在ModelState中,然后粘贴回来。

举例说明:

如果您将return View(family);更改为

        ModelState.Clear(); 
        return View(family);

您将看到它将按预期运行。

希望这有帮助。