C# 未保存字段值更改

C# 未保存字段值更改,c#,sitecore,editing,C#,Sitecore,Editing,我试图从后端动态更改字段值,但看起来更改没有保存 代码 项从主数据库获取 using (new EditContext(item)) { item.Editing.BeginEdit(); try { //Value is updated here from "" to Test item.Fields["Content"].Value = "Test"; }

我试图从后端动态更改字段值,但看起来更改没有保存

代码

从主数据库获取

   using (new EditContext(item))
   {
        item.Editing.BeginEdit();
        try
        {
            //Value is updated here from "" to Test
            item.Fields["Content"].Value = "Test";
        }
        finally
        {
            //item.Fields["Content"].Value is "" again. 
            item.Editing.AcceptChanges();
            item.Editing.EndEdit();
        }                 
    }
更新

正如@sitecore-climper所说,我确实将代码改回了原来的版本-

新建Sitecore.SecurityModel.SecurityDisabler()

但是,问题是缓存。只有在我清除缓存并重新启动浏览器后,更新后的值才会显示在内容编辑器中

为了解决这个问题,我在编辑之前禁用了缓存,并在编辑完成后将其重新打开

CacheManager.Enabled = false;

       using (new Sitecore.SecurityModel.SecurityDisabler())
       {
            item.Editing.BeginEdit();
            try
            {
                item.Fields["Content"].Value = "Test";
            }
            finally
            {
                item.Editing.EndEdit();
            }                 
        }
CacheManager.Enabled = true;
请添加:(新建Sitecore.SecurityModel.SecurityDisabler())

EditContext包含以下代码行:

 public EditContext(Item item)
{
  Assert.ArgumentNotNull((object) item, "item");
  this._item = item;
  this._item.Editing.BeginEdit();
}
因此,如果代码中有 item.Editing.BeginEdit()

您的代码必须是:

  using (new Sitecore.SecurityModel.SecurityDisabler())
 {
    item.Editing.BeginEdit();
    try
    {
        //Value is updated here from "" to Test
        item.Fields["Content"].Value = "Test";
    }
    finally
    {
        //item.Fields["Content"].Value is "" again. 
       // Remove AcceptChanges I never use it , for editing . 
      //  item.Editing.AcceptChanges();
        item.Editing.EndEdit();
    }                 
}
我更新了我的答案,您是否检查了内容编辑器是否有任何更改?
您能清除缓存,然后再次检查吗。这真的很奇怪为什么不工作,我想可能是一个缓存问题

如果有帮助,请尝试使用SecurityDisabler

 using (new Sitecore.SecurityModel.SecurityDisabler())
{
  item.Editing.BeginEdit();
    try
    {
        //Value is updated here from "" to Test
        item.Fields["Content"].Value = "Test";
    }
    finally
    {
        //item.Fields["Content"].Value is "" again. 
        item.Editing.AcceptChanges();
        item.Editing.EndEdit();
    }
}

更改是否提交到您期望的数据库?尝试切换到Web/Master以查看是否存在更改。我仅尝试更改Master数据库。切换也不起作用。您是否尝试过在没有try/finally的情况下将所有内容都放在try{}或测试中?也许那些示波器把事情弄糟了,我也有同样的问题。禁用缓存并没有帮助,我忘了补充一点,我实际上也尝试过。而且,它也不起作用。它会丢失AcceptChanges()或EndEdit()上的值。缓存的设置是正确的。当我清除缓存并重新启动站点时,我可以在内容编辑器中看到更新的值。你知道如何在不清除缓存的情况下强制更新CE中的值吗?我实际上是通过在编辑之前禁用缓存,然后在编辑完成后启用缓存来实现的。谢谢。@NomadTraveler您是如何在编辑过程中禁用缓存的?@MikkelNielsen我已经用有效的解决方案更新了我的问题。检查“更新”部分