我有以下几个类:
public class ComplexType
{
public long? Code { get; set; }
public string Name { get; set; }
}
public class TestViewModel
{
public List<SubModel> List { get; set; }
public ComplexType ComplexTypeTwo { get; set; }
public string StringTwo { get; set; }
}
public class SubModel
{
public ComplexType ComplexTypeOne { get; set; }
public string StringOne { get; set; }
}以及以下控制器操作:
public ActionResult Index()
{
var model = new TestViewModel
{
List = new List<SubModel> { new SubModel{ComplexTypeOne = new ComplexType{Code = 1, Name = "One"}, StringOne = "String One"} },
ComplexTypeTwo = new ComplexType{Code = 2, Name = "Two"},
StringTwo = "String Two"
};
if (TryUpdateModel(model)) {}
return View(model);
}使用此请求:
/Home/Index?List[0].StringOne=updated&StringTwo=updated结果如下:
List[0].ComplexTypeOne: null
List[0].StringOne: "updated"
ComplexTypeTwo.Code: 2
ComplexTypeTwo.Name: "Two"
StringTwo: "updated"可以看出,这会导致ComplexTypeOne被设置为null (这是与ComplexTypeTwo不同的行为)。这是预期的行为吗?如果是这样的话,如何最好地维护集合中未包含在请求中的复杂类型(及其属性)的先前值?
(两天前我问了一个类似的question,但我发布的示例(编辑前)并没有重新造成问题,因为我没有想到只有集合才会发生这种情况)
发布于 2011-08-15 16:21:57
我在之前的一篇文章中问到了这个问题,其中包括一个解决问题的DefaultModelBinder的覆盖:
Calling UpdateModel with a collection of complex data types reset all non-bound values?
https://stackoverflow.com/questions/6957264
复制相似问题