0

我们刚开始使用 Kentico,现在正在测试一下。我们坚持的一件事是在转换中显示数据。

我们有一个自定义表,例如 Author。它有一个 ID 字段,FirstName 和 SurName(均为文本)。Book 是一种文档类型,有一个 ID、Title 和一个下拉列表,我们可以在其中选择作者。

在一个页面上有一个数据列表,我在其中显示带有这样的 previewtransformation 的书:

<div style="text-align:center;padding: 8px;margin: 4px;border: 1px solid #CCCCCC">

    <h2>
    <%# Eval("Title") %> 
    </h2>
      Author: <%# Eval("Author.FirstName") %>
    </div>

现在我们要显示作者的姓名,但是当使用 <%# Eval("Author") %> 时,它会显示 ID。我们发现我们可以使用自定义函数并返回名称,但没有其他方法吗?假设我们不仅要显示作者的姓名,还要显示地址、电子邮件等等……我们真的需要为每个要显示的属性创建一个方法吗?

提前致谢,

比约恩

4

1 回答 1

1

不,您不能以这种方式钻取相关表,因为作者的数据根本不在您与数据列表一起显示的数据源中。但是您不必为要显示的作者的每个属性创建函数。您可以只创建一个函数,该函数将返回整个作者对象,在您的情况下为 CustomTableItem。该功能可能如下所示。

public CustomTableItem GetAuthor(object id)
{
    int authorId = ValidationHelper.GetInteger(id, 0);        
    var pr = new CustomTableItemProvider();
    var item = pr.GetItem(authorId, "customtable.author"); 

    return item;
}

然后在转换中,您将使用 GetValue() 方法来获取值。

作者:<%# GetAuthor(Eval("AuthorID").GetValue("FirstName")) %>

请注意该函数的每次调用都会发出一个数据库请求,因此我建议使用某种缓存。要么输出整个页面的缓存,要么你可以直接在函数内部实现一些缓存机制。

您还有另一个选择是使用 CustomQueryRepeater/DataSource并编写您自己的 SQL 查询,您可以在其中将书籍数据与作者数据连接起来。然后你可以<%# Eval("FirstName") %>直接在你的转换中使用。

于 2013-09-13T10:42:46.260 回答