【问题标题】:Convert lambda expression to Json in MVC在 MVC 中将 lambda 表达式转换为 Json
【发布时间】:2015-02-05 21:24:36
【问题描述】:

在控制器中转换 lambda 表达式时出现错误(“无法将 lambda 表达式转换为类型‘字符串’,因为它不是委托类型”)。我有 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参数有关。但是City 实体中没有MyRegionName 属性。

【问题讨论】:

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


    【解决方案1】:

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

    你有两个选择

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

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

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

    【讨论】:

    • 非常感谢您的解释。我想使用第二个选项,因为它非常简单。另一方面,有一个小问题:列标题似乎不是其他列标题。我试图找到其他类并在此标头上使用,但它不起作用(使用“k-link”类)。知道我可以将标准剑道 ui 网格标题类应用于这个吗?我尝试使用如下标题属性,但没有奏效。再次感谢。
    • columns.Template(@).Title("MyRegionName").ClientTemplate("#=MyRegionName#").HeaderHtmlAttributes(new { @class= "k-link " });
    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多