在返回的模型中显示网格数据

时间:2019-08-17 14:04:03

标签: c# asp.net-mvc linq model

我在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中添加选定的列。我究竟做错了什么?联接表中具有相同名称的列是否有问题?

1 个答案:

答案 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>

希望有帮助。