在MVC中将lambda表达式转换为Json

时间:2015-02-05 21:24:37

标签: json asp.net-mvc entity-framework lambda kendo-ui

在转换控制器中的lambda表达式期间,我收到一个错误(“无法将lambda表达式转换为类型'string',因为它不是委托类型”)。我有3个实体,如下所示:

实体:

public class Student
{
    public int ID { get; set; }

    public string Course { get; set; }  

    public int CityID { get; set; }

    public virtual City City { get; set; }
}


public class City
{
    public int ID { get; set; }        

    public string Name { get; set; }

    public int RegionID { get; set; }

    public virtual Region Region { get; set; }

    public virtual ICollection<Student> Students { get; set; }    
}


public class Region
{
    public int ID { get; set; }

    public string Name { get; set; }

    public virtual ICollection<City> Cities { get; set; } 
}


控制器:

public ActionResult Index_Read([DataSourceRequest] DataSourceRequest request)
    {
        var dataContext = repository.Students;
        var students = dataContext.ToDataSourceResult(request, m => new 
        {
            ID = m.ID,
            Course = m.Course,

            City = m.City.Name, //I can get City name and show it in View.
            MyRegionName = m.City.Region.Name //I can get region name and assign it to 
//"MyRegionName" parameter in JSON. However in View I cannot get it using "MyRegionName" paremeter  
        });           

        return Json(students, JsonRequestBehavior.AllowGet);
    }


查看:

@model IEnumerable<Student>


@(Html.Kendo().Grid<Student>()
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(m => m.ID);
        columns.Bound(m => m.Course);
        columns.Bound(m => m.City);
        columns.Bound(m => m.MyRegionName);
    })
    .Pageable()
    .Sortable()
    .Filterable()
    .Scrollable()
    .Groupable()    
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("Index_Read", "Student"))
    )        
)

以下是可能导致Controller和View中出现问题的要点:

City = m.City.Name, //I can get City name and show it in View.
MyRegionName = m.City.Region.Name //I can get region name and assign it to the  "MyRegionName" parameter in JSON. However in View I cannot get it using "MyRegionName" paremeter.

可能与Student实体中有City参数有关。但MyRegionName实体中没有City属性。

1 个答案:

答案 0 :(得分:2)

我认为这是因为MyRegionName类没有名为Student的属性。

您有两个选择

1)创建一个看起来像学生模型的ViewModel,但要使其具有此类属性。还要确保在ToDataSourceResult的投影函数内部创建新的ViewModel类型而不是匿名对象。

2)只需使用模板列。例如

columns.Template(@<text></text>).Title("MyRegionName").ClientTemplate("#=MyRegionName#");