首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DefaultModelBinder和复杂类型的集合

DefaultModelBinder和复杂类型的集合
EN

Stack Overflow用户
提问于 2011-08-05 21:42:40
回答 1查看 889关注 0票数 0

我有以下几个类:

代码语言:javascript
复制
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; }
}

以及以下控制器操作:

代码语言:javascript
复制
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);
}

使用此请求:

代码语言:javascript
复制
/Home/Index?List[0].StringOne=updated&StringTwo=updated

结果如下:

代码语言:javascript
复制
List[0].ComplexTypeOne: null
List[0].StringOne: "updated"
ComplexTypeTwo.Code: 2
ComplexTypeTwo.Name: "Two"
StringTwo: "updated"

可以看出,这会导致ComplexTypeOne被设置为null (这是与ComplexTypeTwo不同的行为)。这是预期的行为吗?如果是这样的话,如何最好地维护集合中未包含在请求中的复杂类型(及其属性)的先前值?

(两天前我问了一个类似的question,但我发布的示例(编辑前)并没有重新造成问题,因为我没有想到只有集合才会发生这种情况)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-15 16:21:57

我在之前的一篇文章中问到了这个问题,其中包括一个解决问题的DefaultModelBinder的覆盖:

Calling UpdateModel with a collection of complex data types reset all non-bound values?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6957264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档