2013-03-12 77 views
1

我有下面的类定义:MVC 4动态动作方法参数

public class CallGroupViewModel 
    { 
     public string Name { get; set; } 
     public string BulkEmails { get; set; } 
     public List<dynamic> Members {get;set;} 

    } 

成员属性是一些动态淘汰赛代码和内容的变化取决于UI的东西。因为UI现在已经很空虚了,所以我想要做一个捷径。

我的问题是,当它到达我的操作方法时,所有东西都会填充,包括成员,但是它的数组为objects,我无法获取它们上的单个属性。

public ActionResult SaveGroup(CallGroupViewModel group) 

group.Members //this has a count 
group.Members[0].email //this pukes as 'email' is not valid for 'object' 

我可能只是缺少的东西,任何帮助表示赞赏。

谢谢!

+0

你是在用'Members'设置什么?会员中的某个对象是否有“电子邮件”属性(当然是区分大小写)。 – 2013-03-12 03:01:54

+0

它通过客户端上的KnockoutJS完成。基本上是这样的:{email:“”,id:“”,name:“”} – Matt 2013-03-12 03:02:31

+0

所以像这样'group.Members.add(new {email =“”,id =“”,name =“”}) ?我明白你想把这个Javascript对象绑定到KO,但我想了解C#部分。 – 2013-03-12 03:04:51

回答

0

其中填充MVC操作方法的参数模型绑定系统并不打算与动态对象的工作。系统需要类型信息来知道要绑定哪些信息。考虑将您的模型改为使用强类型。

0

对于从对象访问动态属性,你的情况,你可以使用:

var email = group.Members[0].GetType() 
          .GetProperty("Email") 
          .GetValue(group.Members[0], null);