ASP.NET MVC 3模型和viewmodel类

ASP.NET MVC 3模型和viewmodel类,asp.net,asp.net-mvc,asp.net-mvc-3,model,viewmodel,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Model,Viewmodel,我有一个viewmodel,它有一个嵌套的类,而这个类与其他模型类没有连接。我可以在这个嵌套类ClassX中填充必要的数据,以在视图中显示这些数据,但我无法在post操作中通过MyViewModel从嵌套类中获取数据,而只是在post操作中将其作为另一个参数。它出现在原始viewmodel MyViewModel中,但其属性为null/0 public class MyViewModel { public MyViewModel() { classX = new Clas

我有一个viewmodel,它有一个嵌套的类,而这个类与其他模型类没有连接。我可以在这个嵌套类ClassX中填充必要的数据,以在视图中显示这些数据,但我无法在post操作中通过MyViewModel从嵌套类中获取数据,而只是在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类从嵌套类中读取数据吗?

这是一篇适合您的好文章

  MyViewModel myViewModel= new MyViewModel();
  UpdateModel(myViewModel, "MyViewModel");
  myViewModel.myViewModel= new myViewModel();
  UpdateModel(myViewModel.classX, "User.classX");
这是一篇适合你的好文章

  MyViewModel myViewModel= new MyViewModel();
  UpdateModel(myViewModel, "MyViewModel");
  myViewModel.myViewModel= new myViewModel();
  UpdateModel(myViewModel.classX, "User.classX");

如果我正确地理解了您的问题,您需要在操作方法的ClassX cx参数上进行修改。这样,模型绑定器将正确地为其绑定值。Bind.Prefix的值应该是MyViewModel中ClassX属性的名称,在您的示例中是字符串-ClassX

Idea如下所示-在客户端,当您提交表单时,其值将发送到服务器,如下所示

attrA=someValue
classX.SomeProperty=someValue
classX.SomeOtherProperty=someOtherValue

当传递到动作参数时,此名称=值字符串对将转换为对象。等式左侧的名称与MyViewModel的属性名称匹配,ClassX参数保持为空。但当您指定Prefix=classX时,模型绑定器会将等式左侧点后的字符串匹配到classX属性名,这样也会填充classX的值

如果我正确理解了您的问题,您需要在操作方法的ClassX cx参数上进行修改。这样,模型绑定器将正确地为其绑定值。Bind.Prefix的值应该是MyViewModel中ClassX属性的名称,在您的示例中是字符串-ClassX

Idea如下所示-在客户端,当您提交表单时,其值将发送到服务器,如下所示

attrA=someValue
classX.SomeProperty=someValue
classX.SomeOtherProperty=someOtherValue

当传递到动作参数时,此名称=值字符串对将转换为对象。等式左侧的名称与MyViewModel的属性名称匹配,ClassX参数保持为空。但当您指定Prefix=classX时,模型绑定器会将等式左侧点后的字符串匹配到classX属性名,这样也会填充classX的值

只是一个猜测-我认为转换过程只会带来属性。我认为你需要改变公共类;要公开ClassX ClassX{get;set;}谢谢。我尝试了你的建议,它奏效了。只是一个猜测——我认为转换过程只会带来房产。我认为你需要改变公共类;要公开ClassX ClassX{get;set;}谢谢。我试过你的建议,它奏效了。