我在定义自定义编辑器时获取当前项目时遇到问题。
我需要获取当前页面(文章)的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();
}
}
}
答案 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}