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):
- 确保
CMSContext.CurrentUser
有权读取正在查询的自定义 table。
- 确保您传递的是正确的自定义 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 时,它基本上变成了一个 属性 映射,您可以在其中直接通过键(或列)名称访问值。
我已经逐步调试了我的代码,传递给 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):
- 确保
CMSContext.CurrentUser
有权读取正在查询的自定义 table。 - 确保您传递的是正确的自定义 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 时,它基本上变成了一个 属性 映射,您可以在其中直接通过键(或列)名称访问值。