嗨,我是 Sitecore 的新手。我想知道如何通过 Sitecore API 访问 Sitecore Web 数据库中的任何表值,因为我想从 sitecore_web 数据库中的表中填充下拉列表。我们如何使用 Sitecore 查询来访问 Sitecore_Web 数据库中的数据?
4 回答
我不建议您直接访问 Sitecore_Web 数据库。您到底想做什么?Sitecore Api 有很多用于访问站点核心项目的类和方法,但您不能直接访问数据库。也许这个链接会帮助你。
您需要创建一些项目来填充您的下拉列表。
项目是数据库中的一条记录。项目是 Sitecore 站点的基本构建块。一个项目可以表示任何类型的信息,例如一段内容、一个媒体文件、一个布局等。
项目始终具有唯一标识数据库中项目的名称和 ID。项目具有定义项目包含哪些字段的模板。表示单个版本内容的项目是一种语言。可以使用 Items 从数据库中检索项目。
一个项目可能有许多子项目或子项目。这些子项可以通过 Children 属性访问。生成的项目在退回之前会检查安全性和工作流程。因此,虽然一个项目可能有子项目,但当前用户可能会被拒绝访问它们。Parent 属性定义此项的单个父项。一个项目代表一段内容的单一语言的单一版本。项目的语言可以从 Language 属性中获得,而版本可以从 Version 属性中获得。
在更改名称或任何字段值之前,该项目必须处于编辑状态。如果不是,则会引发异常。要进入编辑状态,请使用 BeginEdit 方法,要结束它,请使用 EndEdit 方法。EditContext 类可用作 BeginEdit/EndEdit 的快捷方式。
我从 Sitecore Api 文档中得到这个
正如 sitecore 登山者所说,您不会直接访问 Sitecore 数据库 - 这不是 Sitecore 支持的东西。通常,您可以使用以下步骤通过 Sitecore API 实现此目的:
- 从 Sitecore 树中检索一个节点,其中包含代表您的下拉项目的子项目
- 检索子项
- 将您的下拉列表数据绑定到子项列表
在 ascx 中,你可以有这样的东西:
<asp:DropDownList ID="exampleDropDown" runat="server"/>
在代码隐藏中:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
var item = Sitecore.Context.Database.GetItem("/sitecore/content/SiteData/StuffForADropDownList");
if (item != null)
{
exampleDropDown.DataTextField = "Text";
exampleDropDown.DataValueField = "Value";
exampleDropDown.DataSource = from i in item.Children.AsEnumerable<Sitecore.Data.Items.Item>()
select new
{
Text = i["Text"],
Value = i.ID.ToString()
};
exampleDropDown.DataBind();
}
}
}
此示例假设您有一个项目/sitecore/content/SiteData/StuffForADropDownList
,其中包含一些子项目,每个子项目都有一个名为 的字段Text
。
请使用内置服务访问 sitecore 项目。它提供了在 Get Item 方法中选择数据库的选项。
您可以使用以下 URL 访问 sitecore 服务:
{您的站点}/sitecore/shell/webservice/service.asmx
在 Sitecore 中,您将永远不会使用真正的数据库对象,而不是使用 Sitecore API 填充的对象。Sitecore API 将为您提供来自您的 Sitecore 后端的数据。如果您想用项目列表作为数据源填充下拉列表,请尝试以下操作:
var items = Sitecore.Context.Item.GetChildren().toList(); yourdropdown.Datasource = items; yourdropdown.Databind();
显然正确设置了 Datatext 和 Datevalue 键,但这是标准的.Net。在 Sitecore 中,切勿直接从数据库中获取数据并使用 Sitecore API。