0

在 ASP.NET MVC3 Web 应用程序中。

我有一个看法。该视图有一个 IEnumerable 模型。

我需要遍历所有模型的项目并显示 item.Name

风景:

@model IEnumerable<Object> 
@{
    ViewBag.Title = "Home";
}

@foreach (var item in Model)
{ 
    <div class="itemName">@item.Name</div>
}

在控制器中,我使用 Linq to entity 从数据库中获取对象列表。

控制器:

public ActionResult Index()
{
    IEnumerable<Object> AllPersons = GetAllPersons();
    return View(AllSurveys);
}

public IEnumerable<Object> GetAllPersons()
{
    var Context = new DataModel.PrototypeDBEntities();
    var query = from p in Context.Persons
                select new
                {
                    id = p.PersonsId,
                    Name = p.Name,
                    CreatedDate = p.CreatedDate
                };
    return query.ToList();
}

当我运行时,我收到此错误:

 'object' does not contain a definition for 'Name' and no extension method 'Name' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

如何访问模型项的“名称”属性?

非常感谢您的帮助

4

5 回答 5

3

为您的方法返回创建一个强类型。

public class MyObject {
    public int id {get;set;}
    public string Name {get;set;}
    public DateTime CreatedDate {get;set;}
}

public IQueryable<MyObject> GetAllPersons() 
{ 
    var Context = new DataModel.PrototypeDBEntities(); 
    var query = from p in Context.Persons 
                select new MyObject
                { 
                    id = p.PersonsId, 
                    Name = p.Name, 
                    CreatedDate = p.CreatedDate 
                }; 
    return query;
} 

...然后更新您的视图以反映新模型...

@model IQueryable<MyObject> 
于 2012-06-06T18:54:42.317 回答
1

最简单的方法是定义一个类Person,并更改您的模型/控制器以使用IEnumerable<Person>而不是对象。

于 2012-06-06T18:54:43.743 回答
1

你可能需要做一个明确的Casting

@(string) item.Name

或使用dynamic类型。

在视图中,改变

@model IEnumerable<Object> 

@model IEnumerable<dynamic> 
于 2012-06-06T18:55:03.433 回答
0

我可能是错的,但你可能会尝试使用IEnumerable<dynamic>而不是IEnumerable<Object>

于 2012-06-06T18:53:55.580 回答
0

您的模型类型是IEnumerable<Object>,将其更改为IEnumerable<Person>以便您可以访问Person属性。

于 2012-06-06T18:54:12.590 回答