不在我有這樣一個模型如下:DefaultModelBinder行爲時財產的請求
public class TestViewModel
{
string UpdateProperty { get; set; }
string IgnoreProperty { get; set; }
ComplexType ComplexProperty { get; set; }
}
其中
public class ComplexType
{
long? Code { get; set; }
string Name { get; set; }
}
我的控制器動作:
public Edit(int id, FormColleciton formCollection)
{
var model = service.GetModel(id);
TryUpdateModel(model);
//...
}
當調用編輯動作我具有僅包含UpdateProperty的鍵/值的formCollection參數。
調用TryUpdateModel UpdateProperty設置正確後,IgnoreProperty保持未被觸摸,但ComplexProperty設置爲null,即使它以前有一個值。
Try TryUpdateModel()只修改作爲請求一部分的屬性嗎?如果不是這種情況,最好的解決方法是什麼,這樣ComplexProperty只有在包含在請求中時才被修改?
有人指出出來後由達林說上面的測試用例中並沒有表現出哪裏這個問題真的發生時我添加了一個場景中的問題:
public class TestViewModel
{
public List<SubModel> List { get; set; }
}
public class SubModel
{
public ComplexType ComplexTypeOne { get; set; }
public string StringOne { get; set; }
}
public class ComplexType
{
public long? Code { get; set; }
public string Name { get; set; }
}
控制器動作:
public ActionResult Index()
{
var model = new TestViewModel
{
List = new List<SubModel> {
new SubModel{
ComplexTypeOne = new ComplexType{Code = 1, Name = "5"},
StringOne = "String One"
}
}
};
if (TryUpdateModel(model)) { }
return View(model);
}
發送此請求:
/Home/Index?List[0].StringOne=test
更新SubModel.StringOne屬性,但將ComplexTypeOne設置爲null,即使它未包含在請求中。
這是預期的行爲(因爲這不會發生,除非使用複雜類型的枚舉)?如何最好地解決這個問題?
將查看此 - 我可能錯過簡化後在這裏發佈問題的問題。 (我離開FormCollection參數來查看來自請求的值)感謝您確認默認的模型聯編程序應該保持該值不變。 – TonE
已修改我的帖子以包含發生問題的示例。 – TonE
已發佈一個新的問題與工作示例在這裏:http://stackoverflow.com/q/6957264/95423 – TonE