我在HomeController中有以下lambda
public ActionResult Index()
{
var mainModel = context.Person.Join(context.Car, p => p.personID, c => c.IdPerson, (p,c) => new { pID = p.personID, pName = p.Name, cID = c.carID, cName = c.Name }).ToList();
return View(mainModel );
}
在Index.cshtml中,我设置了模型并尝试构建网格
@model IEnumerable<CarSln.Models.Car>
@{
ViewBag.Title = "Home Page";
}
<div class="row">
@(Html.Grid(Model).Build(columns =>
{
.....................
})
)
</div>
还有模型
namespace CarSln.Models
{
public class Car
{
public int Id { set; get; }
public int carID { set; get; }
public string Name { set; get; }
public int idPerson { set; get; }
public virtual Person Person{ set; get; }
}
}
namespace CarSln.Models
{
public class Person
{
public int Id { set; get; }
public int personID { set; get; }
public string Name { set; get; }
}
}
我尝试了各种方法,甚至更改了表达式,但无法在Grid中添加选定的列。我究竟做错了什么?联接表中具有相同名称的列是否有问题?
答案 0 :(得分:2)
简而言之,同一个名字会引起问题。相反:
1-创建一个表示网格数据的专用类
public class PersonCar
{
public int PersonId { get; set; }
public string PersonName { get; set; }
public int CarId { get; set; }
public string CarName { get; set; }
}
2-选择已定义的类而不是匿名对象
public ActionResult Index()
{
var mainModel = context.Person.Join(context.Car, p => p.personID, c => c.IdPerson, (p, c) => new PersonCar { PersonId = p.personID, PersonName = p.Name, CarId = c.carID, CarName = c.Name }).ToList();
return View(mainModel);
}
3-使用它
@model IEnumerable<CarSln.Models.PersonCar>
@{
ViewBag.Title = "Home Page";
}
<div class="row">
@(Html.Grid(Model).Build(columns =>
{
columns.Bound(x => x.PersonId);
columns.Bound(x => x.PersonName);
columns.Bound(x => x.CarId);
columns.Bound(x => x.CarName);
})
)
</div>
希望有帮助。