我在读取kendo网格数据方面遇到了问题。 控制器抛出一个异常"找不到原始类型的公共属性来排序。"
视图模型
public class PatientModel : IMapFrom<Patient>, IHaveCustomMappings
{
public int? Id { get; set; }
public PersonalDataModel PersonalDataModel { get; set; }
}
控制器
public ActionResult EditingPopup_Read([DataSourceRequest] DataSourceRequest request)
{
var source = repository.All<PatientModel>();
var patients = repository.All<PatientModel>().ToDataSourceResult(request);
return Json(patients,JsonRequestBehavior.AllowGet);
}
查看
@(Html.Kendo().Grid<DentalSoft.Data.Contracts.Patientes.PatientModel>()
.Name("PatientsGrid")
.Columns(columns =>
{
columns.Bound(p => p.PersonalDataModel.FirstName).Filterable(ftb => ftb.Cell(cell => cell.ShowOperators(false)));
columns.Bound(p => p.PersonalDataModel.SecondName).Filterable(ftb => ftb.Cell(cell => cell.ShowOperators(false)));
columns.Bound(p => p.PersonalDataModel.LastName).Filterable(ftb => ftb.Cell(cell => cell.ShowOperators(false)));
columns.Bound(p => p.PersonalDataModel.TelephoneNumber).Filterable(ftb => ftb.Cell(cell => cell.ShowOperators(false)));
columns.Bound(p => p.PersonalDataModel.HealthStatus).Filterable(ftb => ftb.Cell(cell => cell.ShowOperators(false))).Width(200);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(250);
})
.Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("PatientModel"))
.ToolBar(toolbar => toolbar.Create())
.Scrollable()
.Sortable()
.Filterable(ftb => ftb.Mode(GridFilterMode.Row))
.HtmlAttributes(new { @class = "patients-grid" })
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Model(model => model.Id(p => p.Id))
.Create(create => create.Action("EditingPopup_Create", "Grid"))
.Read(read => read.Action("EditingPopup_Read", "Grid"))
.Update(update => update.Action("EditingPopup_Update", "Grid"))
.Destroy(destroy => destroy.Action("EditingPopup_Destroy", "Grid"))
)
.Selectable()
)
ViewModel将拥有更多3,4个复杂对象。
答案 0 :(得分:0)
正在搜索此问题,我找到了following article:
创建一个只包含所需属性的新类 数据绑定网格(映射到网格列的属性)。 如果 绑定到EF确保添加密钥属性(此处为OrderID) case)到ViewModel,即使你没有在网格中显示它。 否则你最终会得到NotSupportedException,说“不能 找到原始类型或属性,以“。
排序
看起来出现此问题是因为返回的repository.All<PatientModel>()
缺少某些Entity Framework所需的属性(您使用的是Entity Framework吗?)。
您还可以尝试以下操作:
public ActionResult EditingPopup_Read([DataSourceRequest] DataSourceRequest request)
{
var patients = repository.All<PatientModel>().ToList();
return Json(patients.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:0)
将您的viewmodel更改为
$("body").on('click', 'a.home:visible', 'a.mobile:visible', 'a.phone:visible', function () {
var attr = $(this).attr('attr');
$(this).parents('.dropdown-menu').prev().prev().text(attr);
});
或
public class PatientModel : IMapFrom<Patient>, IHaveCustomMappings
{
public int Id { get; set; }
public PersonalDataModel PersonalDataModel { get; set; }
}