我想用员工列表填充一个剑道网格。当我将员工列表直接发送到网格时,网格就会填充。当我稍微操作列表时,网格是空的。employee类有一个bool "selected“字段,我需要操作该字段。在这两种情况下,当在调试器中停止控制器时,列表中都有600名员工,因此数据就在那里。
以下是视图中的代码(我甚至没有绑定到“所选”属性-认为这可能是问题所在)
@(Html.Kendo().Grid<TRS.MVC.Models.SelectEmployeeModel>()
.Name("gridEmployee")
.HtmlAttributes(new { style = "height: 300px" })
.Columns(columns =>
{
columns.Bound(p => p.CompanyCode).Width(100);
columns.Bound(p => p.EmployeeCode).Width(100);
columns.Bound(p => p.EmployeeName).Width(100);
})
.Selectable(selectable => selectable
.Mode(GridSelectionMode.Single))
.Navigatable()
.Scrollable()
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("GetEmployees", "EmployeeSelectDlg"))
)
)下面是工作的代码
public ActionResult GetEmployees([DataSourceRequest]DataSourceRequest request)
{
List<SelectEmployeeModel> employeesForGrid;
employeesForGrid = (from e in trs.Employees select e).ToList();
return Json(employeesForGrid.ToDataSourceResult(request));
}不工作的代码(网格为空)。在这两种情况下,当在调试器中停止时,"employeesForGrid“有600个条目。
public ActionResult GetEmployees([DataSourceRequest]DataSourceRequest request)
{
List<Employee> jobEmployees;
List<SelectEmployeeModel> employeesForGrid;
Job selectedJob = (from j in trs.Jobs.Include("JobEmployees") where j.JobKey == selectedJobKey select j).First();
if (selectedJob.JobEmployees.Any())
jobEmployees = (from j in selectedJob.JobEmployees select j).Select(eq => eq.Employee).ToList();
else
jobEmployees = new List<Employee>();
employeesForGrid = (from e in trs.Employees select new SelectEmployeeModel() { Employee = e, Selected = jobEmployees.Contains(e) }).ToList();
return Json(employeesForGrid.ToDataSourceResult(request));
}没有错误信息,只有一个空的网格。
发布于 2013-05-08 00:15:29
所以事实证明你不能这么做
public class SelectEmployeeModel
{
public Employee Employee { get; set; }
public bool Selected { get; set; }
public string CompanyCode { get { return this.Employee.CompanyCode; } }
public string EmployeeCode { get { return this.Employee.EmployeeCode; } }
public string EmployeeName { get { return this.Employee.EmployeeName; } }
public SelectEmployeeModel()
{
}
}相反,我只是这样做:
public class SelectEmployeeModel
{
public bool Selected { get; set; }
public string CompanyCode { get; set; }
public string EmployeeCode { get; set; }
public string EmployeeName { get; set; }
public SelectEmployeeModel()
{
}
}并更改控制器代码:
employeesForGrid = (from e in trs.Employees select new SelectEmployeeModel() {
CompanyCode = e.CompanyCode,
EmployeeCode = e.EmployeeCode,
EmployeeName = e.EmployeeName,
Selected = jobEmployees.Contains(e) }).ToList();修好了。
发布于 2013-05-07 20:15:52
对我来说,结构是不同的,在第一种情况下,集合中充满了SelectEmployeeModel类型的对象。
employeesForGrid = (from e in trs.Employees select e).ToList();在第二种情况下,集合中满是SelectEmployeeModels对象,而Employee属性实际上是SelectEmployeeModel,其余的属性似乎没有指定。
如果将列绑定到嵌套属性上会发生什么?
columns.Bound(p => p.Employee.CompanyCode).Width(100);
columns.Bound(p => p.Employee.EmployeeCode).Width(100);
columns.Bound(p => p.Employee.EmployeeName).Width(100);https://stackoverflow.com/questions/16405078
复制相似问题