Asp.net mvc 4 如何将IEnumerable对象传递到HTML扩展中并通过它循环查找属性?

Asp.net mvc 4 如何将IEnumerable对象传递到HTML扩展中并通过它循环查找属性?,asp.net-mvc-4,Asp.net Mvc 4,不确定我是否有意义,但我正在尝试创建自定义html控件,例如,GridView,我想这样做 @Html.GridView(){ DataSource = model.Tasks, //or it can be model.AssignedTo, etc GridViewColumns = { new GridViewColumn(){Header = "Task ID", DataField= "ID"}, new GridViewCol

不确定我是否有意义,但我正在尝试创建自定义html控件,例如,GridView,我想这样做

@Html.GridView(){
  DataSource      = model.Tasks, //or it can be model.AssignedTo, etc
  GridViewColumns = {
          new GridViewColumn(){Header = "Task ID", DataField= "ID"},
          new GridViewColumn(){Header = "Task Name", DataField = "Name")
          ..
  }
}
任务是任务类型的列表

首先,“数据源”属性的类型是什么?只是
IEnumerable

那么,如何将GridViewColumn的数据字段绑定到IEnumerable的属性?像

foreach(var gridItem in DataSource)
{
        String dataField =  GridViewColumns[0].DataField;
        //??? gridItem.[??]
}

不知道这是否有意义。

谢谢@Curt。那么我如何将属性say“ID”(它是一个字符串)绑定到对象o?字符串是一个对象。您必须使用object.GetType()检查对象的类型(因为您事先不知道数据源的类型):如果它是字符串,您可以通过强制转换来分配它(例如
string s=(string)o
)。如果只从数据集中读取数据,则可以利用每个对象都有一个
.ToString()
method.Curt这一事实。我想你误解了我的意思。在我的例子中,对象o实际上是类型“Task”。任务对象有一个名为“ID”的属性,它是一个整数。GridViewColumn对象上的数据字段是一个字符串,如果我指定了ID。实际上,我希望能够获取Task.ID的值,这样我就可以将该值输出到html td列中。@Liming您必须使用反射来查找该字段,然后获取该值。太复杂了,无法添加注释(需要代码示例),但如果您愿意,我可以在另一个答案中概述该方法。。。
if (dataSource is IEnumerable)
    foreach (object o in (IEnumerable)dataSource)
    {
       ... do something here

    }