信息,我有一個很大的對象,我使出使用@Html.Serialize()
序列化:TryUpdateModel包含列表的模型去除模型
[Serializable]
public class ModelB
{
public List<ModelA> ListOfModelA { get; set; }
// more stuff
}
該對象包含從包含幾個屬性的類對象的列表。其中一些我包括他們在我看來,而其他人我甚至懶得把他們作爲隱藏的領域,因爲我有他們在我的序列化模型。
[Serializable]
public class ModelA
{
public string StringA { get; set; }
public string StringB { get; set; }
// more stuff
public string HiddenStringA { get; set; }
public string HiddenStringB { get; set; }
// more stuff
}
現在,當我回來後與我的變更形式我reconstract我的模型,然後我用從形式獲得的值的字典更新。
[HttpPost]
public ActionResult Edit([Deserialize] ModelTwo model,
FormCollection form)
{
TryUpdateModel(model, form.ToValueProvider());
// more stuff
}
我踩在我的代碼,我做了更新之前,我看到我的反序列化的模型包含一個列表ListOfModelA,裏面包含了應該在那裏的所有元素,並在他們,我可以看到所有的HiddenStringA和HiddenStringB屬性。然後我偷看形式裏面,我看到這樣的與鍵的字典:
ListOfModelA[0].StringA
ListOfModelA[0].StringB
ListOfModelA[1].StringB
ListOfModelA[1].StringB
同時也有針對性質的這樣一個休息NO鍵:
ListOfModelA[0].HiddenStringA
接下來,我動一個更進一步,我讓代碼執行TryUpdateModel。現在,查看ListOfModelA屬性的內部,所有元素都被替換爲所有隱藏值爲空的新元素。這就好像更新重建了整個元素(只有有限的信息),而不是隻更新其擁有信息的屬性。
這是預期的行爲?有沒有辦法保持我的模型,並只更新字典中有鍵的屬性?
感謝,
帕諾斯