ASP.. NET MVC 3模型和视图模型类



我有一个视图模型,它有一个嵌套的类,不是在连接其他模型类。我可以在这个嵌套类(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的值。

相关内容

  • 没有找到相关文章

最新更新