我有一个视图模型,它有一个嵌套的类,不是在连接其他模型类。我可以在这个嵌套类(ClassX)中填充必要的数据来显示视图中的数据,但是当我在post action中将其作为另一个参数时,我无法从post action中的嵌套类(通过MyViewModel)中获取数据。它出现在原始视图模型(MyViewModel)中,但其属性为null/0。
public class MyViewModel
{
public MyViewModel()
{
classX = new ClassX();
}
public ClassX classX;
public int attrA {get;set;}
...
}
public class ClassX {}
//
// POST: /MyModel/Create
public ActionResult Create(MyViewModel myvm, **ClassX cx**, FormCollection collection)
{}
我的问题:我可以通过视图模型类从嵌套类读取数据吗?
http://goneale.com/2009/07/27/updating-multiple-child-objects-and-or-collections-in-asp-net-mvc-views/这是一篇适合你的文章
MyViewModel myViewModel= new MyViewModel();
UpdateModel(myViewModel, "MyViewModel");
myViewModel.myViewModel= new myViewModel();
UpdateModel(myViewModel.classX, "User.classX");
如果我正确理解了你的问题,你需要BindAttribute。动作方法的ClassX cx
参数的前缀。这样,模型绑定器将正确地为它绑定值。Bind.Prefix
的值应该是MyViewModel
中ClassX属性的名称,在您的示例中,字符串- "classX"
//
// POST: /MyModel/Create
public ActionResult Create(MyViewModel myvm, [Bind(Prefix = "classX")]ClassX cx, FormCollection collection)
{}
想法如下-在客户端,当您提交表单时,它的值像这样发送到服务器
attrA=someValue
classX.SomeProperty=someValue
classX.SomeOtherProperty=someOtherValue
传递给动作参数时,这个name=value字符串对被转换为对象。等式左侧的名称与MyViewModel
的属性名称匹配,并且ClassX参数保持为空。但是,然后你指定Prefix = "classX"
,模型绑定器匹配字符串后的点在左边的等号到ClassX属性名,所以应该填充ClassX的值。