MVC3:在视图中访问Object的属性

时间:2012-06-06 18:51:10

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

在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实体来获取数据库中的对象列表。

控制器:

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?)

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

非常感谢您的帮助

5 个答案:

答案 0 :(得分: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> 

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您可能需要明确Casting

@(string) item.Name

或使用dynamic类型。

在视图中,更改

@model IEnumerable<Object> 

@model IEnumerable<dynamic> 

答案 3 :(得分:0)

我可能错了,但您可能会尝试使用IEnumerable<dynamic>代替IEnumerable<Object>

答案 4 :(得分:0)

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