从自定义编辑器Sitecore 6.5获取当前项目

时间:2013-05-23 10:36:24

标签: .net editor sitecore


我在定义自定义编辑器时获取当前项目时遇到问题。
我需要获取当前页面(文章)的ID,但Sitecore.Context.Item返回给我null。 如何获取当前项目的ID?

UPD:
编辑器aspx文件是测试工作

<asp:Repeater ID="Comments" runat="server">
 <ItemTemplate>
    <div>
        <b><%# DataBinder.Eval(Container.DataItem, "Name")%></b>
        <p><%# DataBinder.Eval(Container.DataItem, "Text")%></p>         
    </div>
 </ItemTemplate>
 <SeparatorTemplate><hr /></SeparatorTemplate>
</asp:Repeater>

cs(Page_Load):

protected void Page_Load(object sender, EventArgs e)
{
    var currentItem = Sitecore.Context.Database.GetItem(Request.QueryString["id"]);

    using (var connection = new SqlConnection(@"..."))
    {
        var query = "SELECT Name, Text from dbo.Comments " +
            "WHERE Article = @CurrentItemId";
        var command = new SqlCommand(query, connection);
        command.Parameters.Add("@CurrentItemId", System.Data.SqlDbType.UniqueIdentifier).Value = currentItem.ID.ToGuid();
        try
        {
            connection.Open();
            var list = new List<Comment>();
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                list.Add(new Comment(reader[0].ToString(), reader[1].ToString()));
            }

            Comments.DataSource = list;
            Comments.DataBind();

            reader.Close();
        }
        finally
        {
            connection.Close();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您需要从查询

获取当前项目ID和当前语言
// get the current Item and language
string itemID = Request.QueryString["id"];
Language language = LanguageManager.GetLanguage(Request.QueryString["la"]);

if (language != null && !string.IsNullOrEmpty(itemID))
{
    Database masterDB = Sitecore.Configuration.Factory.GetDatabase("master");
    CurrentItem = masterDB.GetItem(itemID, language);
}

答案 1 :(得分:0)

我找到了这个项目的ID。您可以从巡回请求的QueryStrings获取item_id:
Request.QueryString["id"]

我没有找到答案,因为来自QueryStrings的项目的ID格式为{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}