2011-08-05 69 views
0

我有以下類別:DefaultModelBinder和複雜類型的集合

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 3天前,但例如我張貼(編輯前),因爲我還沒有想通這只是與收藏情況並沒有重新創建問題)

回答