将IEnumerable <object>传递给MVC视图并转换为强类型对象</object>

时间:2012-11-30 12:41:05

标签: c# asp.net-mvc asp.net-mvc-3

我需要将IEnumerable<Object>传递给MVC视图,并将视图转换为强类型对象并相应地显示它。

这似乎对性能产生影响,而不是将其作为MyCustomObject的IEnumerable传递。

foreach (var item in Model.Items)
{
    var current = (MyCustomObject) item;
    <p>@current.Submitted</p>
}

我的问题是

  1. 我应该将整个IEnumerable对象转换为IEnumerable的MyCustomObject吗?
  2. 如何改善此操作的性能?
  3. 如果这不是一个好习惯,那么为我的Items集合传递“变量”类型的最佳方法是什么,它可以是任何类型的自定义对象的集合?

2 个答案:

答案 0 :(得分:2)

使用List将此传递给模型,然后强烈定义

<强>控制器

public ActionResult Index(){

MyModel model = new MyModel();
model.list = //get list from source

return View(model);

}

<强>模型

public List<MyCustomObject> list {get; set;}

答案 1 :(得分:2)

最初,您可以在整个集合中使用Cast:

foreach (var item in Model.Items.Cast<MyCustomObject>()){}

如果您的类型都将继承自基类型,例如MyCustomObject,那么您的模型应指定此类型,例如:

public class MyViewModel<T> where T : MyCustomObject, new() 
{
    public IEnumerable<T> Items { get; set; }
}

您需要确保您希望添加到项目集合中的任何类型都继承自基础MyCustomObject类型