显示另一张桌子的属性 - Kentico

时间:2013-09-12 09:21:21

标签: kentico

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

我们有像Author这样的自定义表。它有一个ID字段,FirstName和SurName(都是文本)。 Book是一种文档类型,具有ID,标题和下拉列表,我们可以在其中选择作者。

在页面上有一个数据列表,我在这里用预览转换显示书籍:

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

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

现在我们要显示作者的姓名但是在使用&lt;%#Eval(“作者”)%&gt;时它显示了ID。我们发现我们可以使用自定义函数并返回名称,但是没有其他方法吗?假设我们不仅要显示作者的姓名,还要显示地址,电子邮件等等......我们是否真的需要为每个要显示的属性创建方法?

提前致谢,

比约

1 个答案:

答案 0 :(得分: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()方法获取值。

  

作者:&lt;%#GetAuthor(Eval(“AuthorID”)。GetValue(“FirstName”))%&gt;

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

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