我有一个viewmodel,它有一个嵌套类,与其他模型类没有关联。我可以在这个嵌套类(ClassX)中填充必要的数据来显示视图中的那些但我无法在post动作中从嵌套类(通过MyViewModel)中获取数据,就像我在post post中作为另一个参数一样。它出现在原始viewmodel(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)
{}
我的问题:我可以通过viewmodel类从嵌套类中读取数据吗?
答案 0 :(得分:0)
MyViewModel myViewModel= new MyViewModel();
UpdateModel(myViewModel, "MyViewModel");
myViewModel.myViewModel= new myViewModel();
UpdateModel(myViewModel.classX, "User.classX");
答案 1 :(得分:0)
如果我正确理解了您的问题,那么您需要ClassX cx
操作参数方法BindAttribute.Prefix。这样,模型绑定器将正确绑定它的值。 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的值。