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

时间:2015-10-15 08:34:35

标签: c# kentico

我已经介入并调试了我的代码,并且传递给def placenew(request): if request.method == 'POST': test = request.POST.get('address') response_data = {} if request.is_ajax(): return HttpResponse( json.dumps(response_data), content_type="application/json" ) return render( request, 'app/placenew.html', {'key':key} ) else: print ("not POST") return render(request, 'app/placenew.html', {'key':key}) 方法的ID是我希望得到的培训计划的ID,并且自定义表类名称是正确的(它正在获取正确的自定义表。 但是,返回的项目是自定义表格中的第一个项目(我在数据库中查找)而不是具有输入ID的项目。

GetItem()

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

(第7版)

3 个答案:

答案 0 :(得分:1)

奇怪,因为你做的似乎是正确的,也许ID不是自定义表中的ItemID。您可以通过查看数据库并使用此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,那就好像很奇怪。

祝您好好调试并找到解决方案。

答案 1 :(得分:1)

您的代码是正确的。

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

  1. 确保CMSContext.CurrentUser具有读取要查询的自定义表的权限。
  2. 确保传递正确的自定义表代码名称。看似微不足道,但再次验证它。

答案 2 :(得分:0)

试试这个:

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

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

var theTrainingPlan = provider["TheColumnNameOfTheValueWant"];

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