在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?)
如何访问模型项的“名称”属性?
非常感谢您的帮助
答案 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
属性。