如何在Sitecore中以编程方式创建项目

Qwe*_*rty 3 asp.net sitecore sitecore8

在内容树中,结构如下

Home
 -England
 -France
 -Germany
Run Code Online (Sandbox Code Playgroud)

有一个子布局(CommentsForm.ascx),用于所有3个页面.当用户浏览"法国"并提交评论时,"评论"项目应保存在"法国"下,依此类推.

在这种情况下,父项(必须在其下创建新项)是动态的.那么,在这种情况下如何获取父项.它是否正确?

protected void btnSubmit_Click(object sender, EventArgs e)
{
 Sitecore.Data.Database masterDB =   Sitecore.Configuration.Factory.GetDatabase("master");

 Item parentItem = Sitecore.Context.Item;

 string name = "Comment_" + Sitecore.DateUtil.IsoNow;
 TemplateItem template = masterDb.GetTemplate("/sitecore/templates/userdefined/Comment");     

 using (new SecurityDisabler())
 {
   //how to go about here??
   //newItem["Author"] = txtAuthor.text;
   //newItem["CommentText"] = txtComments.Text;
   //parentItem.Add("name", template);
 }
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*giu 8

您可以在生产中使用UserSwitcher更安全,但您也可以使用SecurityDisabler(newSecurityDisabler()){}

编辑和重命名必须在Editing.BeginEdit()事务中进行

 Sitecore.Data.Database masterDB =   Sitecore.Configuration.Factory.GetDatabase("master");

 Item parentItem = Sitecore.Context.Item;

 string name = "Comment_" + Sitecore.DateUtil.IsoNow;
 var template = masterDb.GetTemplate("/sitecore/templates/userdefined/Comment");     

using (new Sitecore.SecurityModel.SecurityDisabler())
{
try
{
  Item newItem = parentItem.Add("Name", template);
  if (newItem!=null)
  {
    newItem.Editing.BeginEdit();
   newItem["Author"] = txtAuthor.text;
   newItem["CommentText"] = txtComments.Text;
   newItem.Editing.EndEdit();
  }
}
catch
    {
      newItem.Editing.CancelEdit();
    }
 }
Run Code Online (Sandbox Code Playgroud)