我有一个kendo.grid,该列具有以下定义:
co.Bound(c => c.ReportProperty.PropertyName)
有一个模型,其中定义了一个对象:
public ReportPropertyEntity ReportProperty { get; set; }
该对象具有属性PropertyName
。
我希望其值显示在网格上。
当我这样做时,出现javascript
错误:
无法获取未定义或空引用的属性“ PropertyName”
我相信ReportProperty
对象在使用其属性之前需要实例化。
我有一个kendo.grid,该列具有以下定义:
co.Bound(c => c.ReportProperty.PropertyName)
有一个模型,其中定义了一个对象:
public ReportPropertyEntity ReportProperty { get; set; }
该对象具有属性PropertyName
。
我希望其值显示在网格上。
当我这样做时,出现javascript
错误:
无法获取未定义或空引用的属性“ PropertyName”
我相信ReportProperty
对象在使用其属性之前需要实例化。
这些类的属性从数据库查询中映射而来,并在Entity Project中定义:
public class TicketReportPropertyEntity
{
ReportPropertyEntity ReportProperty { get; set; }
public int ID { get; set; }
public int TicketID { get; set; }
public decimal Amount { get; set; }
}
public class ReportPropertyEntity
{
public int ReportPropertyID { get; set;}
public string ReportGroup { get; set; }
public string PropertyName { get; set; }
public int ReportID { get; set; }
}
从该代码中可以看到,ReportPropertyEntity
类是TicketReportPropertyEntity
的一部分。
这是返回结果的XML的查询,这些类使用以下逻辑从中进行序列化:
var xml = new TicketReportProperty().RunProcedureXmlString("SPU_Get_TicketReportProperty", parameters);
List<TicketReportPropertyEntity> res = SerializeObject<List<TicketReportPropertyEntity>>.FromXml(xml);
return res;
这是从表中生成XML文件的查询:
SELECT
(
SELECT
(
SELECT trp.ID, TicketID, ReportID AS "ReportProperty/ReportID", ReportPropertyID AS "ReportProperty/ReportPropertyID",
PropertyName AS "ReportProperty/PropertyName", PropertyName, Section AS "ReportProperty/ReportGroup", Amount
FROM TicketReportProperty trp
INNER JOIN ReportProperty rp ON rp.ID = trp.ReportPropertyID
WHERE TicketID = 6893
FOR XML PATH('TicketReportPropertyEntity'), TYPE
)
) FOR XML PATH('ArrayOfTicketReportPropertyEntity'), TYPE
序列化的类返回到模型,其字段绑定到模型的字段:
这是模型:
public class TicketReportPropertyModel
{
public List<TicketReportPropertyEntity> TicketReportPropertyList { get; set; }
ReportPropertyEntity ReportProperty { get; set; }
public int ID { get; set; }
public int TicketID { get; set; }
public int ReportID { get; set; }
public decimal Amount { get; set; }
public TicketReportPropertyModel GetTicketReportPropertyData(int ticketId)
{
var client = new IeBalanceServiceClient();
var report = client.GetTicketReportPropertyData(ticketId).ToList();
client.Close();
TicketReportPropertyModel model = MapFromBusinessObject(report);
return model;
}
public TicketReportPropertyModel MapFromBusinessObject(List<TicketReportPropertyEntity> res)
{
TicketReportPropertyModel m = new TicketReportPropertyModel();
m.TicketReportPropertyList = res ?? new
List<TicketReportPropertyEntity>();
return m;
}
public List<ReportPropertyEntity> GetReportPropertyData(int reportId)
{
List<ReportPropertyEntity> reportProp = TicketReportPropertyRepository.GetReportPropertyEntityRepository(reportId);
return reportProp;
}
}
正如我提到的,在我的网格中,我有一个字段包含一个从模板生成的Kendo().ComboBox()
:
columns.Bound(c => c.ReportProperty.PropertyName).Title("Property Name").EditorTemplateName("_PropertyNameEditor").Width(900);
ReportProperty
实体是TicketReportPropertyEntity
的一部分。
这是一个Grid
本身绑定到TicketReportPropertyEntity
的情况:
@(Html.Kendo().Grid<TicketReportPropertyEntity>()
.Name("TicketReportPropertyGrid")
.Columns(columns =>
{
columns.Bound(c => c.ID).Hidden();
columns.Bound(c => c.ReportProperty.PropertyName).Title("Property Name").EditorTemplateName("_PropertyNameEditor").Width(900);
columns.Bound(c => c.Amount).Title("Amount").Format("{0:C}").Width(90);
columns.Command(command =>
{
command.Destroy();
}).Width(250);
})
.ToolBar(toolbar =>
{
toolbar.Create();
toolbar.Save();
})
.Editable(editable => editable.Mode(GridEditMode.InCell).ConfirmDelete("Are you sure").DisplayDeleteConfirmation("Delete"))
.Events(events => events.DataBound("Databound").SaveChanges("SaveGrid").Edit("Edit"))
.DataSource(datasource => datasource
.Ajax()
.Batch(true)
//.PageSize(20)
.Model(model =>
{
model.Id(c => c.ID);
model.Field(c => c.PropertyName);
model.Field(c => c.Amount);
})
.Events(events => events.Error("error_handler"))
.Read(read => read.Action("GetData", "TicketReportProperty", Model))
.Update(update => update.Action("UpdateTicketReportProperty", "TicketReportProperty")))
)
这是我在编辑器模板中定义Kendo().ComboBox()
的方式:
@(Html.Kendo().ComboBox()
.Name("ReportProperty")
.DataTextField("PropertyName")
.DataValueField("ReportPropertyID")
.HtmlAttributes(new { id = "ReportPropertyCB" })
.Template("<span class=\"k-state-default\"><h3>#: PropertyName #</h3><p>#: ReportGroup #</p></span>")
)
这是我收到错误消息的行:
无法获取未定义或空引用的属性“ PropertyName”
c.ReportProperty.PropertyName).Title("Property Name").EditorTemplateName("_PropertyNameEditor").Width(900);
如何访问组合框的字段?