CustomTableItemProvider.GetItem() 正在返回错误的项目

CustomTableItemProvider.GetItem() Is returning the wrong item

我已经逐步调试了我的代码,传递给 GetItem() 方法的 ID 是我要获取的训练计划的 ID 和自定义 table class 名称正确(它正在获得正确的自定义 table。 但是,返回的项目是自定义 table 中的第一个项目(我在数据库中查看过)而不是具有输入的 ID 的项目。

int id = parameter.ID;

CustomTableItemProvider provider = new CustomTableItemProvider(CMSContext.CurrentUser);

entity = provider.GetItem(id, TrainingPlanConstants.TrainingPlanTableName);

无论输入什么整数值,都会返回这个不相关的自定义 table 项目。我已经使用 GetItems() 方法解决了问题 - 但这并不理想,因为我知道我想要哪个 CustomTableItem 并且此解决方法是一个不必要的循环。

(版本 7)

奇怪,因为你所做的似乎是正确的,也许 ID 不是你自定义的 ItemID table。您可以通过查看数据库和 运行 使用此 ID 的查询来调试它,或者使用方法 GetItems() 检查 ItemID 是什么。

以下是 Kentico 7 的更多示例: http://devnet.kentico.com/docs/7_0/devguide/index.html?custom_tables_api_examples_managing_custom_table_data.htm

解决方法可以是 GetItems 方法,也可以在文档中的一个示例中完成。而且,如果您使用此参数,则性能不会太重:

string where = "YourIDColumn = " + id;
int topN = 1;
string columns = "ItemID";

DataSet dataSet = customTableProvider.GetItems(customTableClassName, where, null, topN, columns);

但我同意,如果你有 GetItem 方法并且你有 ID,这看起来很奇怪。

祝调试和找到解决方案顺利。

您的代码是正确的。

需要验证两件事(假设您的 ID 是您正在查看的自定义 table 中的有效 ItemID):

  1. 确保 CMSContext.CurrentUser 有权读取正在查询的自定义 table。
  2. 确保您传递的是正确的自定义 table 代号。看似微不足道,再次验证。

试试这个:

int id = parameter.ID;
string where = "YourIdColumn=" + id;
string columns = "TheColumnYouWant"

CustomTableItem provider CustomTableItemProvider.GetItems(customTableClassName,where,null,columns);

var theTrainingPlan = provider["TheColumnNameOfTheValueWant"];

当您创建 CustomTableItem 时,它基本上变成了一个 属性 映射,您可以在其中直接通过键(或列)名称访问值。