UpT*_*eek 3 asp.net-mvc model-binding asp.net-mvc-2
也许我在这里遗漏了一些东西,但是当使用TryUpdateModel时,似乎忽略了对象模型树3或更多级别的任何内容.
例如(简化):
public virtual ActionResult SomeAction(int id, FormCollection form)
{
IValueProvider vpFrom = form.ToValueProvider();
/*
At this stage, vpForm contains:
1)PropertyA
2) PropertyB.SubPropertyA
3) PropertyB.SubPropertyB.SubSubPropertyA
*/
TryUpdateModel(someObjectModel, null, null, null, vpFrom);
//The first two properties are applied, number (3) seems to be ignored
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?如果这是它的方式,有没有人想出一个解决方法?
使用以下模型创建的快速项目.
public class TestModel {
public TestModelA A { get; set; }
public string Name { get; set; }
}
public class TestModelA {
public TestModelB B { get; set; }
public string Name { get; set; }
}
public class TestModelB {
public TestModelC C { get; set; }
public string Name { get; set; }
}
public class TestModelC {
public TestModelD D { get; set; }
public string Name { get; set; }
}
public class TestModelD {
public TestModelE E { get; set; }
public string Name { get; set; }
}
public class TestModelE {
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的编辑 - 与你的编辑基本相同
[HttpPost]
public ActionResult Edit(FormCollection form) {
IValueProvider vpFrom = form.ToValueProvider();
Models.TestModel t = new Models.TestModel();
TryUpdateModel(t, null, null, null, vpFrom);
return View(t);
}
Run Code Online (Sandbox Code Playgroud)
所有模型都正确创建,这一切都与预期完全一致.我能看到的唯一问题是你可能没有从表单中传回相同的属性名称.(<%: Html.TextBoxFor(model => model.A.B.C.CName)%>例如,不使用)
这些模型需要无参数构造函数.但我相信你会得到一个错误 - 除非你消耗错误.
因此,如果没有关于您的项目的更多信息,将很难提供帮助,因为基本设置会产生预期结果.
| 归档时间: |
|
| 查看次数: |
1158 次 |
| 最近记录: |